Сохранение NSMutableArray полным пользовательских объектов, доступных через весь класс - PullRequest
0 голосов
/ 28 марта 2012

Мой NSMutableArray, полный объектов Article (пользовательский класс, содержащий заголовок NSString *), загружается правильно в одном методе (проверено в отладчике), но когда вызывается другой метод, объекты Article, кажется, «забывают» ряд переменных класса (как переменная заголовка).

Вот код, который загружает объекты Article в NSMutableArray:

for(int i=0;i<[articleURLs count];i++) {
    Article * a = [[Article alloc] init];
    [a initWithWebsite:[articleURLs objectAtIndex:i]];
    if([sectionTitle isEqualToString:@"Features"]) [featuresArticles addObject:a];
    if([sectionTitle isEqualToString:@"News"]) [newsArticles addObject:a];
    if([sectionTitle isEqualToString:@"Sports"]) [sportsArticles addObject:a];
    if([sectionTitle isEqualToString:@"Leisure"]) [leisureArticles addObject:a];
    if([sectionTitle isEqualToString:@"Voices"]) [voicesArticles addObject:a];
    if([sectionTitle isEqualToString:@"Editorial"]) [editorialArticles addObject:a];
    if([sectionTitle isEqualToString:@"Page 13"]) [page13Articles addObject:a];
    [a release];
}

и вот код в другом методе, который ищет эти значения:

NSString *cellValue = @"ddd";
//NSArray * tempArray;
Article * a;
if([sectionTitle isEqualToString:@"Features"]) a = [featuresArticles objectAtIndex:indexPath.row];
if([sectionTitle isEqualToString:@"News"]) a = [newsArticles objectAtIndex:indexPath.row];
if([sectionTitle isEqualToString:@"Sports"]) a = [sportsArticles objectAtIndex:indexPath.row];
if([sectionTitle isEqualToString:@"Leisure"]) a = [leisureArticles objectAtIndex:indexPath.row];
if([sectionTitle isEqualToString:@"Voices"]) a = [voicesArticles objectAtIndex:indexPath.row];
if([sectionTitle isEqualToString:@"Editorial"]) a = [editorialArticles objectAtIndex:indexPath.row];
if([sectionTitle isEqualToString:@"Page 13"]) a = [page13Articles objectAtIndex:indexPath.row];

cellValue = [a getTitle];

Я застрял на этом более 24 часов, и интернет не помогает. Есть предложения?

Ответы [ 2 ]

0 голосов
/ 28 марта 2012

В пользовательском классе (Article) мне нужно было написать [title retain]; после того, как я закончил установку в файле класса Article.m.

0 голосов
/ 28 марта 2012

Ваша собственность, вероятно, неправильно объявлена ​​в интерфейсе вашего класса.Это должно выглядеть примерно так:

@interface Article : NSObject
{
}

@property (nonatomic,copy) NSString *title;

@end

copy лучше всего подходит для строковых свойств, потому что если вы установите свойство с помощью изменяемой строки, то ваш класс сделает неизменную копию строки.Если вы просто retain это сделаете, изменяемая строка может измениться, и ваш класс об этом не узнает.

...