2012-08-04 7 views
5

私は、一時的なNSDate属性を持つコアデータNSFetchedResultsController UITableViewを使用しています。一時的なプロパティとしてこれを持っている主な理由は、私のUITableViewエントリがNSDateに基づいてセクションに入れられるようになりますが、日付が変わるとセクション間を移動することができます。iOS - Core Data transientプロパティの更新/更新方法

これまでのところうまくいきましたが、更新/リフレッシュ(私は本当にこれが新しいので、正しい用語を使用しているかどうかわかりません)。マルチタスクからkillするか、Xcodeで再実行してください。私がそれをしなければ、アイテムは変わらず、正しいセクションに入れられません。手動で更新する方法はありますか?ユーザーはこれを実行する必要はありません。

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

+0

更新プログラムはどのように伝達されますか? NSFetchedResultsControllerデリゲート? – Mundi

+0

ええ、私はそうだと思います。 – mhbdr

+1

SQliteストアでは、並べ替え記述子に一時属性を使用できないことが関係している可能性があります。 –

答えて

3

オブジェクトにrefreshObject:mergeChanges:を送信すると、一時的なプロパティがリフレッシュされます。

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

+0

こんにちはsvena、返信いただきありがとうございます。私はrefreshObject:mergeChangesをどこに置くのですか?それは行動の中にあるだろうか?ありがとう! – mhbdr

+0

日付が変更されたことを知っているポイントでオブジェクトを更新することができます。しかし、私はムンディが推奨するアプローチをとることをお勧めします。はるかに便利です。一時的なプロパティを常に明示的にリフレッシュすることができます。 – svena

+0

一時的なプロパティは更新されていないようです:「フラグがYESの場合、このメソッドは一時的なプロパティに影響しません」 https://developer.apple.com/reference/coredata/nsmanagedobjectcontext/1506224-refreshobject –

7

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

第二、あなたはEntity.mファイルでキーのパスの依存関係を指定することを確認します。

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

第三、必ずあなたのコントローラでは、あなたのことを確認します何かが不明である場合は、アップルの例を見てみましょう

- (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 
} 

を介して管理オブジェクトコンテキストの変化に適切に反応DateSectionTitles

+0

keyPathsForValuesAffecting ...が一時的なプロパティである間に強制的にリフレッシュすることを100%確信していますか?以前はrefreshObject:mergeChanges:がオブジェクトに送信されたときにのみ、一時的なプロパティがリフレッシュされることに気付きました。 – svena

+0

はい、確かです。これはライブアプリからの作業コードです。 – Mundi

+0

Appleの例のように設定していますが、変更があったときには更新されないようです。各項目のセクション識別子は、nsdateの相違点の大きな計算によって作成されますが、アプリを起動すると、アプリをマルチタスキングから終了して再オープンしたときと同じように再計算されないようです。 – mhbdr

関連する問題