Core data 核心数据对象在其相关对象的属性更改时更新

Core data 核心数据对象在其相关对象的属性更改时更新,core-data,ios,nsfetchedresultscontroller,Core Data,Ios,Nsfetchedresultscontroller,我仍然习惯于核心数据的工作方式,我四处寻找有关我的问题的信息,但我没有找到任何明显解决我的确切问题的答案 我有三类托管对象:贷款、借款人和照片。借款人对象与贷款对象具有一对多关系(这意味着借款人可以有多个贷款,但贷款只能有一个借款人)。借用对象还与照片对象具有一对一的关系 我使用一个NSFetchedResultsController使一个表保持一组loan对象中更改的最新状态。当其他借用者属性更改时,更改通知将到达NSFetchedResultsController,并且我的表将更新。但是,当

我仍然习惯于核心数据的工作方式,我四处寻找有关我的问题的信息,但我没有找到任何明显解决我的确切问题的答案

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

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


请帮忙

您可以尝试处理NSManagedObjectContextObjectsIDChangeNotification通知。

这有点松松垮垮,但您可以执行以下操作,假设您已将NSManagedObject子类化为Loan、Borrower和Photo类

1.)在贷款中,为贷款照片的“图像”属性设置KVO

2.)在贷款中,添加changeCount属性(NSNumber*)

3.)当提醒贷款更改其照片图像时,增加changeCount

因此,在非常粗略的代码中,类似这样的内容:

在荷载中,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) 这只涉及“获取”,而不涉及“插入”(即新贷款)

2) 这假设一笔贷款将有一张照片

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


4) 虽然我在我的一个应用程序中使用了远程类似的机制,但我还没有对此进行测试。

你能给我看一些示例代码吗?我还不太熟悉KVO或者如何指定从贷款到借款人照片的图像属性的关键路径。谢谢不过,唯一的变化是,拥有照片的是借款人,而不是贷款。因此,我实际上需要修改代码,以观察贷款借款人的图像属性。在这种情况下,关键路径是“借用者.图像”而不是“图像”?我想是的,但我不确定。我很想知道你的情况。这是最好的选择。这种情况就是通知的作用。酷,这就像一种魅力。感谢所有帮助过我的人!