2010-11-16 2 views
0

Быстрый вопрос относительно массива в xcode. У меня есть ht efollowing код, который, как предполагается, проходит через массив строк, которые он получил через php и JSON, и передал эти строки в пользовательский объект со строками в качестве ivars для объекта, а затем добавит этот объект в новый массив :Проблема добавления настраиваемых объектов в Mutable Array

for (int i = 0; i<[list count]; i++) { 
     Article *article = [[Article alloc] init]; //creates custom object 
     article.uid = [[list objectAtIndex:i] objectAtIndex:0]; 
     article.title = [[list objectAtIndex:i] objectAtIndex:1]; //adds string as ivars 
     article.description = [[list objectAtIndex:i] objectAtIndex:2]; 
     articleArray = [[NSMutableArray alloc] init]; //inits the new array 
     [articleArray addObject:article]; //should add the object but seems to fail 
     [article release]; //releases the object 
     NSLog(@"%@", article.description); 
    } 
    NSLog(@"%d", [articleArray count]); 
    NSLog([articleArray description]); 
} 

код делает возвращает правильные значения, используя NSLog(@"%@", article.description); но не правильная длина для нового массива и это только добавляет одно значение в массив, который является строка для article.description, которая не имеет никакого смысла для меня. Массив списка содержит 2 элемента, каждый из которых содержит массивы, содержащие строки.

ответ

6

Вы воссоздаете статьюArray в каждом цикле. Declarate его снаружи, и он будет работать:

NSMutableArray *articleArray = [[NSMutableArray alloc] init]; //inits the new array 
for (int i = 0; i<[list count]; i++) { 
     Article *article = [[Article alloc] init]; //creates custom object 
     article.uid = [[list objectAtIndex:i] objectAtIndex:0]; 
     article.title = [[list objectAtIndex:i] objectAtIndex:1]; //adds string as ivars 
     article.description = [[list objectAtIndex:i] objectAtIndex:2]; 
     [articleArray addObject:article]; //should add the object but seems to fail 
     [article release]; //releases the object 
     NSLog(@"%@", article.description); 
    } 
    NSLog(@"%d", [articleArray count]); 
    NSLog([articleArray description]); 
} 

Вы также можете использовать лучше для (NSArray * listElement в списке) синтаксис вместо этого.

+0

Спасибо! Я знал, что это будет что-то простое, что я пропал без вести. – SamRowley

+0

Примечание для более свежих читателей, которые наткнулись на это, как и я: образец кода включает пример освобождения переменной после использования - эта явная версия запрещена в проекте с использованием Automatic Reference Counting (ARC) - просто игнорируйте эту строку, и она будет работа хорошо. – Jonathan

+2

@ user3152873 - Если быть справедливым, то в этом случае все здесь написано с использованием ручного подсчета ссылок, из которых в быстром поиске содержится около 2000 ответов. –

Смежные вопросы