5

次のコードでは:

NSFetchedResultsController *frc =
[[NSFetchedResultsController alloc]
 initWithFetchRequest:fetchRequest
 managedObjectContext:myManagedObjectContext
 sectionNameKeyPath:@"store"
 cacheName:@"SomeCache"
 ];

sectionNameKeyPathの@"store"値は、実際には、セクションヘッダーのタイトルとして本当に必要なname属性を持つStoreエンティティへの関係を指しています。

しかし、私のコードのセットアップ方法は、代わりに次のようなセクションタイトルを取得するため、達成できません。0x5b504f0 0x5b51190これは、私が知る限り、フェッチされているStoreオブジェクトのコードデータアドレスです。

NSFetchedResultsControllerを使用して、sectionNameKeyPath:@ "store"からフェッチするもののname属性をフェッチするように指示するにはどうすればよいですか?または、他の回避策はありますか?

4

2 に答える 2

5

試すsectionNameKeyPath:@"store.name"

于 2011-08-31T00:14:39.683 に答える
1

これが古いスレッドであることは知っていますが、Swiftを使用してソリューションを追加したいと思います。

この解決策は、によって返されるセクション名の形式にNSFetchedResultsController依存するため、Appleが変更できる内部実装に依存することをアドバイスする必要があります。

セクション名には永続データストア内のオブジェクトIDのURIが含まれているため、最初にURIを抽出してから、対応する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)が、あなたは考えを理解します。

于 2016-07-11T11:58:57.510 に答える