2010-04-25 2 views
2

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

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.

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

+0

Просто из любопытства вы согласны с любыми ответами? – shosti

+0

Конечно, разве я не отвечал вам, что я сделал, как вы сказали? ОК, просто посмотрел, что вы говорите, позвольте мне щелкнуть по галочкам ... – iFloh

ответ

2

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

itemsArray = nil; 

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

EDIT

снова Глядя на это, у вас есть:

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

Это область действия в if заявлении.

Так вынимают NSMutableArray и просто использовать:

itemsArray = [[NSMutableArray alloc] init]; 
+0

Привет, Алекс, попробовал, но приводит к методу «[NSCFArray count]: отправленному в неинициализированный измененный объект объекта« ошибка »... – iFloh

+0

вот и все, спасибо большое – iFloh

1

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

Вы также можете использовать autorelease, чтобы упростить.

+0

спасибо большое, вот и все – iFloh

1

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

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

+0

Привет jrtc27, вот как у меня сейчас, просто не видно в приведенном выше примере кода, спасибо большое – iFloh