Создание массива массивов - PullRequest
2 голосов
/ 25 апреля 2010

Я пытаюсь заставить следующий цикл работать для заполнения массива массивов:

while (condition) {
[itemsArray fillFromDB];

if (! [checkArray containsObject:checkFlag]) {
  // Add existing itemsArray to myArray
  if (itemsArray.count) {
    // add the itemsArray to myArray and create a new instance of itemsArray
    [myArray addObject:itemsArray];
    [itemsArray release];
    NSMutableArray *itemsArray = [[NSMutableArray alloc] init];
  }
  [itemsArray addObject:myObject];
  [checkArray addObject:checkFlag];
} else {
  [itemsArray addObject:tmpEvent];
}  }

Однако я пытаюсь сформировать этот цикл, он выпадает из-за выхода itemsArray

  • когда я использую release (как выше), массив не переинициализируется как новый экземпляр с alloc. Ожидая пустоты, следующий объект добавляется в старый массив.
  • когда я использую removeAllObjects, мой массив очищается и массив присоединяется к myArray.

Куда я иду в неправильном направлении?

Ответы [ 3 ]

1 голос
/ 25 апреля 2010

Вы можете разместить:

itemsArray = nil;

после сообщения release, чтобы убедиться, что вы не указываете на старый экземпляр.

EDIT

Глядя на это снова, вы получаете:

NSMutableArray *itemsArray = [[NSMutableArray alloc] init];

Это находится в пределах оператора if.

Так что возьмите NSMutableArray и просто используйте:

itemsArray = [[NSMutableArray alloc] init];
0 голосов
/ 25 апреля 2010

Другие нашли проблему, но создали новую проблему. При первом создании изменяемого массива необходимо использовать NSMutableArray *itemsArray = [[NSMutableArray alloc] init];. Затем, после, вы можете release и использовать itemsArray = [[NSMutableArray alloc] init];. Важно, чтобы первый (тот, который создает указатель) встречался только один раз, а остальные - столько раз, сколько нужно.

EDIT: Вы можете написать NSMutableArray *itemsArray; перед оператором if, а затем использовать itemsArray = [[NSMutableArray alloc] init]; в операторе if.

0 голосов
/ 25 апреля 2010

Не пишите NSMutableArray *itemsArray = [[NSMutableArray alloc] init]; - вы повторно объявляете переменную в области действия оператора if, поэтому вне оператора if, itemsArray все равно будет ссылаться на старое значение Я не уверен, почему компилятор не жалуется). Вы можете просто сказать itemsArray = [[NSMutableArray alloc] init].

Возможно, вы также захотите использовать авто-релиз для упрощения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...