【发布时间】:2015-10-18 14:51:21
【问题描述】:
我正在开发一个搜索 91,000 个条目的 iPhone 应用程序。我正在使用 CoreData,它工作得很好,除了创建数据表需要大约 2 秒。我已经将它编程为在后台进行搜索,并添加了一个微调器,但用户体验仍然不理想。我尝试使用 FMDB,它运行良好,但速度并不快。
基本上,我在 swift 中创建了我的 xcdatamodel,将我的条目添加到其中,效果很好。 (以下代码为手写输入,如有错误请见谅)
然后我创建一个 NSFetchedResultsController:
let moc =(UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext
searchText: String? = "name contains[c] \"seachText\""
nsfr = NSFetchRequest(entityName: "Example")
nsfr.fetchBatchSize = 20
nsfr.predicate = NSPredicate(format: searchText!)
nsfrc = NSFetchedResultsController(fetchRequest: nsfr, managedObjectContext: moc, sectionNameKeyPath: "section", cacheName: nil)
然后在我的 UITableViewController 类中(符合 NSFetchedResultsControllerDelegate):
nsfrc.delegate = self
nsfrc.performFetch()
self.tableView.reloadData()
有什么方法可以加快请求速度,比如对数据库进行哈希处理?有什么方法可以将搜索范围缩小到单词的开头?我的数据包括数千个句子,我希望能够在其中搜索部分字符串。例如,“laz fo”应该找到“The lazy brown fox”。现在“azy own”也会找到字符串,这不是必需的。任何帮助,将不胜感激!即使将时间减半也很棒。
【问题讨论】:
标签: ios swift sqlite search core-data