2011-06-24 45 views
0

我正在构建一个新闻应用程序(TabBar应用程序),我必须将来自RSS源的最新消息加载到UITableView中。我已经设法做到了,但是我现在面临的问题是两个折叠: - 启动时,表格视图保持灰色(没有数据,但应用程序响应),直到我切换到其他标签栏项目并返回查看加载的数据。我想这与收集数据的延迟有关。但是我看到一些应用程序比较快速地收集数据。我怎样才能做到这一点?我怎样才能避免显示空白的灰色视图,直到收集数据。顺便说一句,从web服务的响应速度相当快,重量轻。 - 同样,参考脉冲应用程序的工作方式,我如何缓存先前的数据,以便每次启动应用程序时,在用户刷新之前它不必获取新数据?UITableView远程数据问题

一些代码示例真的有帮助。我试图寻找URLCache的例子,但老实说,这对我来说很困惑。谢谢!

回答

1

在我看来,你没有重新加载你的表数据时,数据已被检索。当您完成加载rss提要时,只需添加[myTableVariable reloadData];

要在不同的应用程序运行之间缓存数据,您可以将其保存到文档文件夹中的文件并在启动时读取它。使用缓存的数据,直到检索到新数据。您可以修改下面的代码

- (BOOL)SaveData 
{ 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask ,YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 

    NSString *path = [documentsDirectory stringByAppendingString:@"/cache.dat"]; 
    NSArray *userInfo = [NSArray arrayWithObjects:@"Apples", @"Bananas", @"Oranges", nil]; 

    BOOL saved = [NSKeyedArchiver archiveRootObject:userInfo toFile:path]; 

    return saved; 
} 

- (NSArray *)LoadData 
{ 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask ,YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *path = [documentsDirectory stringByAppendingString:@"/cache.dat"]; 

    NSArray *userInfo = [NSKeyedUnarchiver unarchiveObjectWithFile:path]; 

    return userInfo; 
} 

希望这有助于

+0

我确实有[myTableVariable reloadData];在viewDidLoad中,但仍然是空白的视图行为... – xoail

+0

viewDidLoad仅在创建视图并显示之前调用一次。那时你可能没有收集到数据。 –

+0

仪式,我怎么去解决这个问题?另外,我试图实现你的逻辑保存数据,但我得到这一行错误布尔保存= [NSKeyedArchiver archiveRootObject:userInfo toFile:path];错误:由于未捕获的异常'NSInvalidArgumentException'而终止应用,原因:' - [News encodeWithCoder:]:无法识别的选择器发送到实例0x4e44440' – xoail

0

您可以尝试在tabBar顶部显示加载视图,并在tableView完成显示数据时删除。

0

显示加载指示灯和隐藏的tableview,直到你从RSS加载数据。在XML解析器完成解析之后,您需要重新加载您的UITableview。那可行。如果您不希望每次为服务器加载数据,则可以将所有数据存储在本地sqlite数据库中。