在this question的基础上,我设法使用撤消组和单个托管对象上下文来处理添加可引用现有Cocktail
和/或{{1}的Ingredients
}。
现在我被一个UI限制 - 在获取的结果控制器中(按Brands
排序)你可以简单地看到要添加的cocktail.name
的空行。 Marcus Zarra建议:
您可以添加到谓词中以过滤掉未保存的对象,例如使用
Cocktail
。
但我尝试过的每次迭代都会返回错误的格式
(entity.isTemporaryID == NO)
如何在Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'keypath entity.isTemporaryID not found in entity <NSSQLEntity Cocktail id=4>'
中执行等效的[[cocktail objectID] isTemporaryID]
?
答案 0 :(得分:1)
调用是在objectID而不是托管对象:
BOOL isTemporary = [[managedObject objectID] isTemporaryID];
有关详细信息,请参阅Core Data Programming guide的此部分。
我不确定为什么你看到一个未添加实体的空行。如果尚未添加实体,则应由获取的结果控制器获取该实体。听起来您已将实体插入上下文但尚未填充它。
如果是这种情况,您可以使用谓词来排除部分或全部属性为空的实体。如果您最终执行此操作,您可能希望向该类添加一个标志属性,如果实体未处于要显示的状态,则该属性将返回NO(通过自定义getter)。
答案 1 :(得分:0)
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'keypath entity.isTemporaryID not found in entity <NSSQLEntity Cocktail id=4>'
如何在NSPredicate中执行等效的[[cocktail objectID] isTemporaryID]?
那样做。
您要求的不是[[cocktail objectID] isTemporaryID]
,而是[[cocktail entity] isTemporaryID]
。如果你想要objectID
(你这样做,因为你想问它是否是一个临时ID),那么你需要在你的关键路径中提出要求。
您应该阅读Key-Value Coding Programming Guide,即使您已经阅读过,也可以在entity
中查找objectID
和the NSManagedObject reference方法。从这些中你可以清楚地看到Marcus Zarra要么将两者混合起来要么objectID
,而是偶然输入entity
。它发生在每个人身上 - 这就是为什么总是检查文档是好的。