我正在开发一个应用程序,允许用户浏览/搜索书籍并下载它们。 UITableView共有3个,下载/搜索/浏览
如果未下载,我想显示“下载”按钮,否则显示“打开”按钮。 下载表格 View 很简单,我只是查询并显示核心数据中的所有书籍。
服务器是无状态的,不知道用户是否下载了该书。
我正在将下载的书籍保存在核心数据中。使用 FetchedResultsController 下载表格 View 。
当用户按类别搜索/浏览时,启动一个新的 REST 请求,并使用响应的 JSON 作为内存中的 NSArray 来备份 tableview 以显示标题和作者姓名等。
书籍列表很大,服务器支持一些高级搜索,例如使用缩写词和按受欢迎程度排序。因此下载整个列表并在本地执行搜索需要更多工作。
更新确定书籍是否在搜索 View 中下载的好方法是什么?每次在主线程中的cellForRowAtIndexPath
中查询核心数据库听起来很昂贵。
我还想在后台下载完成时实时更新UI状态,所以下载后修改JSON也不行
谢谢
最佳答案
如果书籍列表很小(足够小,您可以一次性从服务器上下载它),您可能可以在内存中为其构建模型。尝试查询服务器,使用 CoreData 结果修改响应(全部在后台),然后告诉 UITableView
重新加载自身(在 UI 线程中)。
用于说明的伪代码:
dispatch_async(..., ^{
[server requestData:param onComplete:^(NSDictionary* result){
NSArray* someResult = [moc executeFetchRequest:...];
NSArray* tableViewData = [mybusinesslogic mergeServerResult:result
withCoreDataResult:someResult];
myTableViewController.tableViewData = tableViewData;
dispatch_async(dispatch_get_main_queue(), ^{
[myTableViewController.tableView reloadData];
});
}];
});
关于iphone - 如何在搜索 iPhone 期间检查某个项目是否已下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14679106/