0

私はコアデータエンティティ「人」を持っています。セクション インデックスのタイトルをカスタマイズする必要があるため、独自のロジックに基づいてデータを特定のセクションに分離する一時属性を作成することを考えました。ただし、fetchedResultsController を使用してフェッチ リクエストを作成し、この一時的な属性「sectionNameKeyPath」を保持して、fetchedResultsController sectionNameKeyPath を初期化します。したがって、これを最初のソート記述子のキーとして作成する必要がありました。ただし、これによりアプリケーションがクラッシュします。fetchedResultsController で sectionNameKeyPath として一時属性を使用することはできませんか

私のクラッシュログは.

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'keypath sectionNameKeyPath not found in entity <NSSQLEntity Person id=1>' 
4

1 に答える 1

2

sectionNameKeyPathフェッチされた結果コントローラと同様に、一時属性を使用できます。ただし、ソート記述子で一時属性を使用することはできません。SQLite ベースの Core Data ストアの場合、ソート記述子で使用できるのは非一時的な属性のみです。

これは、「Core Data Programming Guide」のFetch Predicates and Sort Descriptorsに記載されています。

一方、SQL ストアは述語とソート記述子を SQL にコンパイルし、データベース自体で結果を評価します。これは主にパフォーマンスのために行われますが、Cocoa 以外の環境で評価が行われることを意味するため、Cocoa に依存するソート記述子 (または述語) は機能しません。サポートされているソート セレクタは次のとおりです。
さらに、SQLite ストアを使用して一時プロパティをソートすることはできません。

ただし、最初のソート記述子は sectionNameKeyPath と同じである必要はありません。initWithFetchRequest:managedObjectContext:sectionNameKeyPath:cacheNameのドキュメントを参照してください。

sectionNameKeyPath
...
このキー パスが fetchRequest の最初の並べ替え記述子によって指定されたものと同じでない場合、同じ相対順序を生成する必要があります。たとえば、fetchRequest の最初のソート記述子は、永続プロパティのキーを指定する場合があります。sectionNameKeyPath は、永続プロパティから派生した一時プロパティのキーを指定する場合があります。

iOS Developer LibraryのDateSectionTitlesサンプル コードは、これがどのように機能するかを示しています。

于 2012-12-14T11:49:46.973 に答える