Чтобы развернуть правильный ответ @ omz:
Метод numberOfRowsInSection
возвращает не NULL, а ноль. (В Objective-C nil == ноль, а Null - одноэлементный объект.)
Единственная причина, по которой он возвращает ноль, - это если [stories count]
возвращает ноль, а единственная причина, по которой [stories count]
возвращает ноль, - это если у него нет элементов. Поскольку вы подтвердили, что синтаксический анализ работает, а stories
имеет элементы, то табличное представление должно искать данные, прежде чем произойдет анализ.
Этот метод вызывается первым, и это единственное место, где вы перезагружаете данные:
-(void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[newsTable reloadData];
// You trigger the tableview to call numberOfRowsInSection before stories is populated.
}
Этот метод вызывается только после того, как табличное представление появилось на экране, и только после того, как табличное представление появляется, вы заполняете stories
.
-(void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
if([stories count] == 0){
NSString *path = @"http://feeds.feedburner.com/TheAppleBlog";
[self parseXMLFileAtURL:path];
}
cellSize = CGSizeMake([newsTable bounds].size.width, 60);
}
Тем не менее, ничто не заставляет табличное представление снова вызывать numberOfRowsInSection
, поэтому табличное представление остается пустым. Простое перемещение заполненных историй в viewWillAppear:
решит проблему.
Каждый раз, когда вы изменяете данные, от которых зависит представление таблицы (независимо от причины), вы должны вызывать reloadData
, иначе представление таблицы не будет знать, что оно больше не отображает текущий набор данных.
В качестве отступления, вы должны использовать точечную нотацию при обращении к свойствам, чтобы убедиться, что они правильно сохранены. Вы должны использовать self.stories
для ссылки на свойство stories
. В противном случае он может быть выпущен случайным образом, что приведет к такой же случайной аварии.