3 回答
TA贡献1805条经验 获得超10个赞
问题是您已经deleted为实体定义了属性。这与的isDeleted方法冲突NSManagedObject,因此您应该重命名该属性。
以下“实验”表明,如果您将属性称为“已删除”(c具有自定义deleted属性的托管对象),则会发生奇怪的事情:
// Set custom "deleted" property to YES:
c.deleted = @YES;
// Use the property, as your Code 1
NSLog(@"%@", [c deleted]);
// Output: 1
// Use Key-Value Coding, as your Code 2
NSLog(@"%@", [c valueForKey:@"deleted"]);
// Output: 0
// Now really delete the object and try again:
[context deleteObject:c];
NSLog(@"%@", [c valueForKey:@"deleted"]);
// Output: 1
您的“代码1”引用该属性,因此它返回预期的结果。“代码2”使用键值编码,并[c valueForKey:@"deleted"]返回YES对象是否实际上已从上下文中删除!
因此,重命名该属性应该可以解决您的问题。不幸的是,如果属性名称与内置方法冲突,则编译器不会发出警告。
TA贡献1811条经验 获得超6个赞
使用格式占位符替换布尔值:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K == %@",
@"deleted", @(NO)];
您可以使用键路径,但是对于解析器而言,右侧可能看起来不像“否”。
TA贡献1780条经验 获得超3个赞
isDeleted和Delete是两个不同的名称。当我检查NSManagedObject.h头文件时,// state - methods can be used through KVC, for example for enabling/disabling widgets based on the state of the object - (BOOL)isInserted; - (BOOL)isUpdated; - (BOOL)isDeleted;
可能是苹果有一些私有属性
- 3 回答
- 0 关注
- 921 浏览
添加回答
举报