5

一時的な NSDate 属性を持つコア データ、NSFetchedResultsController UITableView を使用しています。これを一時的なプロパティとして使用する主な理由は、UITableView エントリが NSDate に基づいてセクションに配置されますが、日付が変わるとセクション間を移動できるためです。

これまでのところ、うまく機能しているようですが、アプリを閉じて強制終了したときにのみ更新/更新されます(私はこれに本当に慣れていないので、正しい用語を使用しているかどうかわかりません、ごめんなさい!)マルチタスクから、または Xcode を介して再実行します。そうしないと、アイテムは変更されず、正しいセクションに配置されません。ユーザーが正しく実行するためにそれを行う必要がないように、手動で更新する方法はありますか?

ありがとうございました!

4

2 に答える 2

7

まずsectionNameKeyPath、フェッチされた結果コントローラーを作成するときに一時的なプロパティがのみ使用されることを確認してください。(Apple がサンプル コードで行っているように) 適切な名前を付けsectionIdentifierます。実際の日付は、エンティティの別の属性にする必要があります。(私はそれを呼びますdateAttribute

次に、Entity.m ファイルでキー パスの依存関係を指定していることを確認します。

+ (NSSet *)keyPathsForValuesAffectingSectionIdentifier {
    // If the value of dateAttribute changes, the section identifier may change as well.
    return [NSSet setWithObject:@"dateAttribute"];
}

3 番目に、コントローラーで、次の方法で管理対象オブジェクト コンテキストの変更に適切に対応するようにします。

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller
{
   if (!self.tableView.editing) [self.tableView reloadData];
   // the quick and dirty method without animations;
   // see referenced code for a more pleasant approach
}

不明な点がある場合は、Apple の例DateSectionTitlesを参照してください。

于 2012-08-05T17:02:19.637 に答える
3

オブジェクトに を送信すると、一時的なプロパティが更新さrefreshObject:mergeChanges:れます。

キー値監視メカニズムを適用するために Mundi が提供するソリューションも機能する可能性があり、機能する場合は、明示的に更新するよりもはるかに便利です。

于 2012-08-06T06:35:09.113 に答える