Core data 核心数据对象在其相关对象的属性更改时更新
我仍然习惯于核心数据的工作方式,我四处寻找有关我的问题的信息,但我没有找到任何明显解决我的确切问题的答案 我有三类托管对象:贷款、借款人和照片。借款人对象与贷款对象具有一对多关系(这意味着借款人可以有多个贷款,但贷款只能有一个借款人)。借用对象还与照片对象具有一对一的关系 我使用一个NSFetchedResultsController使一个表保持一组loan对象中更改的最新状态。当其他借用者属性更改时,更改通知将到达NSFetchedResultsController,并且我的表将更新。但是,当photo属性更改为指向另一个photo对象时,不会向NSFetchedResultsController传递任何通知。似乎当借款人改变其照片关系时,没有任何与借款人相关的贷款被告知Core data 核心数据对象在其相关对象的属性更改时更新,core-data,ios,nsfetchedresultscontroller,Core Data,Ios,Nsfetchedresultscontroller,我仍然习惯于核心数据的工作方式,我四处寻找有关我的问题的信息,但我没有找到任何明显解决我的确切问题的答案 我有三类托管对象:贷款、借款人和照片。借款人对象与贷款对象具有一对多关系(这意味着借款人可以有多个贷款,但贷款只能有一个借款人)。借用对象还与照片对象具有一对一的关系 我使用一个NSFetchedResultsController使一个表保持一组loan对象中更改的最新状态。当其他借用者属性更改时,更改通知将到达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或者如何指定从贷款到借款人照片的图像属性的关键路径。谢谢不过,唯一的变化是,拥有照片的是借款人,而不是贷款。因此,我实际上需要修改代码,以观察贷款借款人的图像属性。在这种情况下,关键路径是“借用者.图像”而不是“图像”?我想是的,但我不确定。我很想知道你的情况。这是最好的选择。这种情况就是通知的作用。酷,这就像一种魅力。感谢所有帮助过我的人!