0

如何在这个 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"]; 
4

1 回答 1

1

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

myEntity *anEntity = (myEntity *)anObject;

也就是说,您确实需要确保它是正确的类,因此添加一点保护是值得的:

if ([anObject isKindOfClass:[myEntity class]) {
    myEntity *anEntity = (myEntity *)anObject;
    // do stuff
} else {
    NSLog(@"Panic / cry / plead");
}
于 2013-05-21T22:59:51.827 回答