Храните ссылки на переменную в NSMutableArray - PullRequest
0 голосов
/ 27 августа 2009

Я ищу способ хранения ссылок на переменные внутри NSMutableArray. Поскольку переменные будут создаваться динамически на основе того, что выбрал пользователь, я хочу иметь возможность просто отсортировать этот массив и получить ссылки на эти созданные переменные. В случае, если это имеет значение, я создаю проект iPhone. Однако, когда я пытаюсь сделать это, используя следующий код:

for (int a = 0; a < 10; a++)
{
UIView *tempView;
[listingOfViews addObject:tempView];
}

for (int a = 0; a < [listingOfViews count]; a++)
{
[listingOfViews objectAtIndex:a] = defaultViewStructure;
}

Это дает мне эту ошибку: «ошибка: lvalue требуется как левый операнд присваивания»

Есть идеи?

РЕДАКТИРОВАТЬ: Кроме того, я получаю эту ошибку: "ошибка: запрос на член" размер "в чем-то не структура или объединение"

Когда я пытаюсь сделать

for (int a = 0; a < [listingOfViews count]; a++)
{
[listingOfViews objectAtIndex:a].size.height = ...
}

Ответы [ 2 ]

1 голос
/ 27 августа 2009

На ваш второй вопрос:

for (int a = 0; a < [listingOfViews count]; a++)
{
    [listingOfViews objectAtIndex:a].size.height = ...
}

Здесь есть недоразумение (UIView не имеет -size, у него есть -frame, который включает в себя размер), в сочетании с чем-то, что на самом деле немного сложно из-за очень запутанной нотации точек, добавленной в Obj-C 2 и неудачная поломка объектной модели, когда вы добираетесь до структур. То, как вы делаете то, что вы пытаетесь сделать, это:

UIView *view = [listingOfViews objectAtIndex:a];
NSRect frame = [view frame];
frame.size.height = ...
[view setFrame:frame];

Существуют способы незначительного сокращения количества строк, но вам нужно извлечь структуру NSRect, изменить ее и затем вернуть обратно. Вы не можете изменить высоту за один вызов в большинстве представлений.

0 голосов
/ 27 августа 2009

Что вы имеете в виду:

[listingOfViews replaceObjectAtIndex:a withObject:defaultViewStructure];

Но произойдет сбой, когда вы попытаетесь поместить эти неинициализированные указатели tempView в массив. Что вы действительно пытаетесь сделать здесь? Я думаю, что настало время сделать шаг назад и начать с основ Objective-C. Похоже, вы пытаетесь портировать концепции C ++ непосредственно в ObjC, и они делают вещи совсем по-другому.

Возможно, вы захотите начать с Программирование в Objective-C , а затем, вероятно, Программирование какао для Mac OS X . (Последний основан на Mac, а не на iPhone, но это все же лучшая отправная точка.)

...