iphone - 如何在搜索 iPhone 期间检查某个项目是否已下载

标签 iphone ios core-data

我正在开发一个应用程序,允许用户浏览/搜索书籍并下载它们。 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/

相关文章:

iOS - 在更新到新版本时保留旧的 sqlite 数据库

iphone - UIWebView loadHTMLString 在 iOS5 中不起作用

ios - 检测第二个 tableview 单元格何时进入 View - 然后执行操作

ios - Swift 4 中的核心数据并发问题

ios - iOS 9.3 中 Swift 4.0 的未知崩溃

iphone - 将按钮添加到导航栏 ios

iphone - 如何使用代码更改显示名称

ios - 如何根据按下的按钮更改 UITableView 中 Label 的文本?

iphone - 在中断(例如电话调用或用户退出应用程序)后保存/恢复状态

尽管返回 True,IOS ObjectContext 仍未保存到持久存储