Iphone NSPredicate将不包括具有';未保存在NSFetchedResultsController中

Iphone NSPredicate将不包括具有';未保存在NSFetchedResultsController中,iphone,objective-c,cocoa,core-data,Iphone,Objective C,Cocoa,Core Data,在此基础上,我成功地使用撤销组和单个托管对象上下文来处理添加鸡尾酒,该鸡尾酒可以引用现有的成分和/或品牌 现在我被一个UI单元卡住了——在fetched results controller(按鸡尾酒.name排序)中,您可以短暂地看到要添加的鸡尾酒的空行。马库斯·扎拉建议: 您可以添加到谓词以筛选出未保存的对象,例如,通过使用(entity.isTemporaryID==NO) 但我尝试的每一次迭代都会出现形式错误 由于未捕获的异常“NSInvalidArgumentException”而终止

在此基础上,我成功地使用撤销组和单个托管对象上下文来处理添加
鸡尾酒
,该鸡尾酒可以引用现有的
成分
和/或
品牌

现在我被一个UI单元卡住了——在fetched results controller(按
鸡尾酒.name
排序)中,您可以短暂地看到要添加的
鸡尾酒的空行。马库斯·扎拉建议:

您可以添加到谓词以筛选出未保存的对象,例如,通过使用
(entity.isTemporaryID==NO)

但我尝试的每一次迭代都会出现形式错误

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因是:“在实体中找不到keypath entity.isTemporaryID”


如何在一个
NSPredicate
中执行等价的
[[cockbox objectID]isTemporaryID]

调用的是objectID而不是托管对象:

BOOL isTemporary = [[managedObject objectID] isTemporaryID];
有关详细信息,请参阅的本节

我不知道为什么会看到未添加实体的空行。如果尚未添加实体,则应由“获取结果”控制器获取该实体。听起来您已经将实体插入到上下文中,但尚未填充它

如果是这种情况,可以使用谓词排除某些或所有属性为空的实体。如果您经常这样做,您可能希望向类添加一个flag属性,如果实体未处于要显示的状态,该属性将返回NO(通过自定义getter)

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“在实体中找不到keypath entity.isTemporaryID”
如何在NSPredicate中执行[[Cockbox objectID]isTemporaryID]的等效项

那样做

您要求的不是
[[鸡尾酒对象id]isTemporaryID]
,而是
[[鸡尾酒实体]isTemporaryID]
。如果您想要
objectID
(您需要这样做,因为您想询问它是否是临时ID),那么这就是您需要在密钥路径中请求的


您应该阅读,即使您已经阅读了,也应该在中查找和方法。从这些信息中,您会发现Marcus Zarra很清楚地将两者混淆了,或者无意中输入了
objectID
。每个人都会遇到这种情况,这就是为什么总是检查文档的原因。

您的案例是正确的——实体已添加,但尚未填充到详细信息控制器中。我希望在临时objectID上使用谓词,而不是检查空键或向数据模型添加标志。您还可以选择先创建对象,然后再将其添加到托管对象上下文。如果你这样做,那么在你添加对象之前,对象不会显示在抓取中。同意——但我要寻找的是谓词本身中Objective-C方法的效果,以便抓取结果控制器不会列出未保存的实体。我理解这一点(好吧,直到“所以”-我不是iPhone开发人员,所以我对获取的结果一无所知。通过在键路径中命名该方法,谓词将调用该方法。同样,请参阅《KVC编程指南》。
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'keypath entity.isTemporaryID not found in entity <NSSQLEntity Cocktail id=4>'