У меня есть класс, реализующий UITableViewDelegate
и NSXMLParserDelegate
.Мое приложение на основе вкладок.Когда я выбираю нужную вкладку, в методе viewWillAppear
моего класса я запускаю свой xml-анализатор для анализа RSS-канала по определенному URL, а затем заполняю UITableView
содержимым каналов.
Теперь яхочу иметь кнопку, чтобы «обновить» представление (то есть снова проанализировать RSS-канал и отобразить новые результаты).Итак, у меня есть этот метод в качестве действия кнопки обновления:
-(IBAction)refreshFeeds:(id)sender
{
if (stories){
[stories release]; // Stories is an NSMutableArray for storing the parsed feeds
stories = nil;
}
[self viewWillAppear:YES];
NSLog(@"RELOADING!!!!!!!!!!!!!!!");
}
Моя проблема в том, что когда я нажимаю кнопку «обновить», представление становится пустым, как будто нет каналов для отображения.
Если затем я переключаюсь на другую вкладку и затем возвращаюсь, представление таблицы снова заполняется каналами.
Что я делаю не так?Заранее спасибо.
(Вот часть того, как я реализовал класс)
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
if ([stories count] == 0){
NSString * path = @"http://www.theRssUrl.com";
[self parseXMLFileAtURL:path];
}
}
//custom method to parse rss xml
- (void)parseXMLFileAtURL:(NSString *)URL {
if (stories) {
[stories release];
stories = nil;
}
stories = [[NSMutableArray alloc] init];
[[NSURLCache sharedURLCache] setMemoryCapacity:0];
[[NSURLCache sharedURLCache] setDiskCapacity:0];
//you must then convert the path to a proper NSURL or it won't work
NSURL *xmlURL = [NSURL URLWithString:URL];
rssParser = [[NSXMLParser alloc] initWithContentsOfURL:xmlURL];
[rssParser setDelegate:self];
[rssParser parse];
}
- (void)parserDidEndDocument:(NSXMLParser *)parser {
[newsTable reloadData]; //newsTable is the UITableView i want to refresh
self.view = newsTable;
[rssParser release];
rssParser = nil;
}
РЕДАКТИРОВАТЬ:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
// Configure the cell.
static NSString *MyIdentifier = @"MyIdentifier";
CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:MyIdentifier];
if (cell == nil){
cell = [[[CustomCell alloc] initWithFrame:CGRectZero reuseIdentifier:MyIdentifier] autorelease];
}
int storyIndex = indexPath.row;
cell.lTitle.text = [[stories objectAtIndex: storyIndex] objectForKey: @"title"];
cell.lSummary.text = [[stories objectAtIndex: storyIndex] objectForKey: @"summary"];
return cell;
}