在以下代码中:
NSFetchedResultsController *frc =
[[NSFetchedResultsController alloc]
initWithFetchRequest:fetchRequest
managedObjectContext:myManagedObjectContext
sectionNameKeyPath:@"store"
cacheName:@"SomeCache"
];
sectionNameKeyPath的@“store”值实际上指向一个Store实体的关系,该实体具有我真正需要的name属性作为我的节标题标题。
但是我的代码设置方式无法完成,因为我改为获得以下部分标题: 0x5b504f0 0x5b51190 就我所知,Store对象的代码数据地址是哪个。
如何使用NSFetchedResultsController以便我可以告诉它我希望它从sectionNameKeyPath获取其名称属性:@“store”?或者还有其他一些解决方法吗?
答案 0 :(得分:5)
尝试sectionNameKeyPath:@"store.name"
答案 1 :(得分:1)
我知道这是一个旧线程,但我想使用Swift添加我的解决方案。
我必须建议此解决方案取决于NSFetchedResultsController
返回的部分名称的格式,因此它取决于Apple可以更改的内部实现。
节名称包含持久数据存储中对象ID的URI,因此您可以通过首先提取URI然后向Store查询具有相应URI的对象来获取对象
override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
let sectionInfo = fetchedResultsController?.sections![section]
let sectionName = sectionInfo?.name
//This part depends on the internal implementation of sectionInfo.name
let initialRange = sectionName?.rangeOfString("<")
let finalRange = sectionName?.rangeOfString(">")
let uri = sectionName?.substringWithRange((initialRange?.endIndex)!..<(finalRange?.startIndex)!)
let url = NSURL(string: uri!)
let store = fetchedResultsController?.managedObjectContext.persistentStoreCoordinator
let objectID = store?.managedObjectIDForURIRepresentation(url!)
let coreObject = fetchedResultsController?.managedObjectContext.objectWithID(objectID!)
//return the correct property from the object as the title
let title = ...
return title
}
好吧,你需要检查错误(我会在guard
前面使用很多let
),但你明白了。