从XML文件缓存表视图的问题

时间:2012-09-11 04:27:48

标签: iphone cocoa-touch uitableview

我的应用程序有一个表视图,可以从XML文件加载数据并缓存此数据。现在,该表可以在XML文件更新时添加新的部分,但是我无法确定如何同时删除/覆盖表的最旧部分。

这是表视图控制器文件的fetchEntries部分:

- (void)fetchEntries {

    // Initiate the request...
    NSURL *url = [NSURL URLWithString:@"http://www.test.com"];
    channel = [[FeedStore sharedStore] fetchRSSFeedWithURL:url completion:
           ^(RSSChannel *obj, NSError *err) {

               if(!err) {

                   // How many items are there currently?
                   int currentItemCount = [[channel items] count];

                   // Set our channel to the merged one
                   channel = obj;

                   // How many items are there now?
                   int newItemCount = [[channel items] count];

                   // For each new item, insert a new row. 
                   int itemDelta = newItemCount - currentItemCount;
                   if(itemDelta > 0) {
                       NSMutableIndexSet *stuff = [NSMutableIndexSet indexSet];
                       for(int i = 0; i < itemDelta; i++) 
                           [stuff addIndex:i];
                       [[self tableView] insertSections:stuff withRowAnimation:UITableViewRowAnimationNone];
                   } 

                }
           }];
[[self tableView] reloadData];

}

另一种选择是检查版本号,如果XML已更新,则完全删除缓存和表,然后重新加载数据。但是当我这样称呼时:

- (void)deleteCache {
    NSString *cachePath =
    [NSSearchPathForDirectoriesInDomains(NSCachesDirectory,
                                     NSUserDomainMask,
                                     YES) objectAtIndex:0];
    NSFileManager *fileManager = [NSFileManager defaultManager];
    [fileManager removeItemAtPath:cachePath error:NULL];
    [[channel items] removeAllObjects];
    [self fetchEntries];
} 

...在重新启动应用程序之前,表视图不会使用新数据进行更新。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

Prasad说得对 - 我正在删除整个缓存目录而不是单个文件。