2010-12-04 22 views
1

私はまだCore Dataの動作方法に慣れていますが、私の問題に関する情報を見回しましたが、問題。関連オブジェクトのプロパティが変更された場合のコアデータオブジェクトの更新

私には、ローン、借り手、写真の3種類の管理オブジェクトがあります。借り手オブジェクトは、貸出オブジェクトと1対多の関係にあります(借り手は複数のローンを持つことができますが、ローンには1つの借り手しかないことを意味します)。また、借入人オブジェクトは、写真オブジェクトと一対一の関係にあります。

私はNSFetchedResultsControllerを使用して、ローンオブジェクトの変更を反映してテーブルを最新の状態に保ちます。他の借り手プロパティが変更されると、変更通知がNSFetchedResultsControllerに到達し、私のテーブルが更新されます。しかし、写真のプロパティが別の写真オブジェクトを指すように変化すると、通知はNSFetchedResultsControllerに渡されません。借り手が写真の関係を変えたときに、借り手に関連する貸出金のいずれも伝えられていないようです。

助けてください!

答えて

2

NSManagedObjectContextObjectsDidChangeNotification通知を処理できます。

+0

+1これが最適なオプションです。このような状況が通知の対象となります。 – TechZen

+0

涼しい、これは魅力のように働いた。助けてくれた皆様に感謝します! –

0

少しリスがありますが、NSManagedObject for Loan、Borrower、Photoクラスをサブクラス化していると仮定すると、次のことができます。

1.)ローンでは、ローンの写真の「イメージ」プロパティにKVOを設定します。

2.)ローンで、changeCountプロパティ(NSNumber *)を追加します。

3.ローンに写真の画像が変更されるよう警告されたら、changeCountを増やしてください。

ので、非常に粗いコード、このようなもので:Load.mで

- (void) awakeFromFetch 
    { 
    [super awakeFromFetch]; 

    [[self photo] addObserver:self 
     forKeyPath:@"image" 
     options:NSKeyValueObservingOptionNew 
     context:nil]; 
    } 


- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context 
    { 
    if ([keyPath isEqualToString:@"image"]) 
     { 
     NSInteger temp = [[self changeCount] intValue]; 
     ++temp; 
     [self setChangeCount:[NSNumber numberWithInteger:temp]]; 
     } 
    } 

いくつかの注意点があります。

1) 'fetch'とではなく、 'insert'(つまり、新しいローン)のみです。

2)これは、フェッチされたローンに写真があることを前提としています。

3)これは、 'changeCount'プロパティをLoanに追加したことを前提としています。

4)私はこれをテストしていませんが、私のアプリケーションの1つでリモートで同様のメカニズムを使用しています。

+0

サンプルコードを表示できますか?私はまだKVOに精通していないか、ローンから借り手の写真のイメージプロパティまでの主要な経路をどのように指定するかはわかりません。 –

+0

コードスケッチが追加されました。 – westsider

+0

さて、私はそのコードで作業できると思います。ありがとう!しかし、唯一の変更は、ローンではなく写真を持っているのが借り手だということです。だから私は実際にローンの借り手のイメージプロパティを観察するコードを変更する必要があります。その場合、キーパスは単に "イメージ"ではなく "borrower.image"になるでしょうか? –

関連する問題