【发布时间】:2019-04-08 14:31:26
【问题描述】:
我有一个名为Asset 的Entity。 Asset 有两个属性 id:UUID 和 data:NSData。我有一个名为 fetchedAssetsController 的 NSFetchedResultsController。
我使用以下方法获取所有Assets:
let request = Asset.fetchRequest() as NSFetchRequest<Asset>
do {
fetchedAssetsController = NSFetchedResultsController(fetchRequest: request, managedObjectContext: context, sectionNameKeyPath: nil, cacheName: nil)
fetchedAssetsController.delegate = self
try fetchedAssetsController.performFetch()
} catch let error as NSError {
print("Could not get Assets. Error:\(error), \(error.userInfo)")
}
我有一个 tableView,然后填充 fetchedAssetsController.fetchedObjects
我的问题是这样的;我需要也能够通过他们的id搜索我的Assets,而不会影响tableView的fetchedObjects。目前,要通过 id 查找Asset,我正在执行以下操作;
func findIndexPathOfAssetByID(_ assetID: UUID) -> IndexPath? {
for asset in fetchedAssetsController.fetchedObjects {
if asset.id == assetID {
return fetchedAssetsController.indexPath(forObject: asset)
}
}
return nil
}
这似乎是一种非常不直观且费力的方法。我曾想过使用第二个NSFetchedResultsController 来寻找我想要的Asset id,但我相信这会覆盖我原来的TableView 使用的提取。由于我还是 CoreData 的新手,我敢肯定有一些功能我完全不知道,或者我正在以完全错误的方式处理这个问题..
实现我想做的最好的方法是什么?
【问题讨论】:
-
迭代 fetchedObjects 不应该做任何改变,你应该能够使用
return fetchedAssetsController.fetchedObjects.filter({ $0.id == dataId }).first使代码更短一点
标签: ios swift core-data nsfetchedresultscontroller nsfetchrequest