Core Data对象在其相关对象的属性更改时更新

时间:2010-12-04 07:28:58

标签: core-data ios nsfetchedresultscontroller

我仍然习惯了核心数据的运作方式,我一直在寻找有关我的问题的信息,但我没有找到明显解决我确切问题的答案。

我有三类托管对象:贷款,借款人和照片。借款人对象与贷款对象具有一对多关系(意味着借款人可以拥有多笔贷款,但贷款只能有一个借款人)。借款人对象也与照片对象具有一对一的关系。

我正在使用NSFetchedResultsController来使表更新一组贷款对象中的更改。当其他借用者属性更改时,更改通知到达NSFetchedResultsController并且我的表更新。但是当photo属性更改为指向另一个照片对象时,则不会向NSFetchedResultsController传递任何通知。借款人改变其照片关系时似乎没有告知与借款人有关的贷款。

请帮忙!

2 个答案:

答案 0 :(得分:2)

您可以尝试处理NSManagedObjectContextObjectsDidChangeNotification通知。

答案 1 :(得分:0)

它有点松鼠,但你可以做到以下几点,假设你已经为贷款,借款人和照片类子类化了NSManagedObject。

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'和 not with'insert'(即新贷款)。

2)这假设获得的贷款将有一张照片。

3)这假设您已将“changeCount”属性添加到贷款。

4)虽然我在我的一个应用程序中使用远程类似的机制,但我没有测试过这个。