Почему мой NSMutableArray "наполовину мертв" в cellForRowAtIndexPath? - PullRequest
2 голосов
/ 04 мая 2011

В rootViewController.hi есть свойство NSMutableArray mainList:

@interface RootViewController : UITableViewController {    
    NSMutableArray *mainList;
}
@property (nonatomic, retain) NSMutableArray *mainList;
@property (nonatomic, retain) IBOutlet DetailsViewController *detailsController;

В файле m при загрузке все работает просто отлично:

- (void)viewDidLoad
{
self.mainList = [[NSArray alloc] initWithObjects:@"Country1", @"Contry2", nil];
}

Заполнение массива с помощьюкласс также работает нормально (при первой загрузке):

innehall *myInnehall= [[innehall alloc] init];
[myInnehall fillMain];
self.mainList = myInnehall.theMainList;
[myInnehall release];

(отладчик показывает данные, которые должны быть правильными в массиве)

При прокрутке приложение сбивается при установке метки ячейки:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
cell.textLabel.text = [self.mainList objectAtIndex: [indexPath row]];
return cell;
}

В отладчике Массив заполняется только 1-9 вместо 19.10-19, содержащих странные объекты.Что может есть мой массив ??

Ответы [ 2 ]

2 голосов
/ 04 мая 2011

Прежде всего, ваше свойство NSMutableArray должно быть правильно инициализировано, например:

self.mainList = [[NSMutableArray alloc] init];

(не как NSArray)

Тогда выесли ваша собственность mainList указывает на myInnehall.theMainList, и вы отпускаете ее впоследствии, это то, что приводит к сбою.

Попробуйте просто добавить myInnehall элементы к вашим mainList

[self.mainList addObjectsFromArray:myInnehall.theMainList];

0 голосов
/ 04 мая 2011

Попробуйте изменить

self.mainList = myInnehall.theMainList;

на

self.mainList = [myInnehall.theMainList copy];

Можете ли вы также добавить NSLog([self.mainList description]) в свой cellForRowAtIndexPath и опубликовать результат?

PS: У вас есть NSMutableArray в объявлении свойства, и вы инициализируете его как NSArray?

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