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”引用該屬性,因此它返回預期的結果?!按a2”使用鍵值編碼,并[c valueForKey:@"deleted"]返回YES對象是否實際上已從上下文中刪除!
因此,重命名該屬性應該可以解決您的問題。不幸的是,如果屬性名稱與內置方法沖突,則編譯器不會發出警告。

TA貢獻1811條經驗 獲得超6個贊
使用格式占位符替換布爾值:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K == %@",
@"deleted", @(NO)];
您可以使用鍵路徑,但是對于解析器而言,右側可能看起來不像“否”。

TA貢獻1780條經驗 獲得超4個贊
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 關注
- 963 瀏覽
添加回答
舉報