如何在didChangeObject中获取对象的值:(id)anObject(NSfetchedResultsController)

时间:2013-05-21 22:49:08

标签: ios core-data nsfetchedresultscontroller

如何在此fetchedResultsController委托方法中访问对象实际值?

我想根据对象的值设置要删除/更改的行的索引路径部分,因为该表有多个数据源

- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject
  atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type
  newIndexPath:(NSIndexPath *)newIndexPath 
{
....get objects value, e.g. myEntity.city 
}

现在我知道对象永远是类myEntity(至少最终,不确定“anObject”究竟指的是什么),但显然当我想设置myEntity * anEntity = anObject的实例时,编译器会抱怨;

我的解决方法是将每个部分的数据放入数组中,并完成所有工作 tableView:commitEditingStyle:forRowAtIndexPath:我知道哪个部分被调用,我只需要访问indexpath.row。缺点是我必须在每次更改后重新加载数组,并且不能直接使用fetchedResultsController。

编辑: 接受的答案很好,这个捷径似乎也适用于我的目的:

NSString *aString = [anObject valueForKey:@"city"]; 

1 个答案:

答案 0 :(得分:1)

编译器确实抱怨,但它只是一个警告,因为你没有告诉它会发生什么。它很简单:

myEntity *anEntity = (myEntity *)anObject;

那就是说,你确实需要确定它是正确的类,所以添加一点保护是值得的:

if ([anObject isKindOfClass:[myEntity class]) {
    myEntity *anEntity = (myEntity *)anObject;
    // do stuff
} else {
    NSLog(@"Panic / cry / plead");
}