亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

核心數據NSPredicate“已刪除==否”無法正常工作

核心數據NSPredicate“已刪除==否”無法正常工作

滄海一幻覺 2020-02-03 12:49:33
我在父子上下文中使用UIManagedDocument。在我的孩子的情況下,我執行以下操作代碼1NSSet *results = [self.event.memberships filteredSetUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {    return ([[evaluatedObject deleted] boolValue] == NO);}]];上面的代碼返回預期的結果(僅事件的未刪除成員)。代碼2但是這段代碼沒有。它獲取所有記錄。NSPredicate *predicate = [NSPredicate predicateWithFormat:@"deleted == NO"];NSSet *results = [self.event.memberships filteredSetUsingPredicate:predicate];似乎令人困惑。兩者應返回相同的結果,但predicateWithBlock返回正確的結果,其中as predicateWithFormat返回所有記錄。使用predicateWithBlock代替的優點和缺點是predicateWithFormat什么?
查看完整描述

3 回答

?
holdtom

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對象是否實際上已從上下文中刪除!


因此,重命名該屬性應該可以解決您的問題。不幸的是,如果屬性名稱與內置方法沖突,則編譯器不會發出警告。


查看完整回答
反對 回復 2020-02-03
?
楊魅力

TA貢獻1811條經驗 獲得超6個贊

使用格式占位符替換布爾值:


NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K == %@",

@"deleted", @(NO)];


您可以使用鍵路徑,但是對于解析器而言,右側可能看起來不像“否”。


查看完整回答
反對 回復 2020-02-03
?
Helenr

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;可能是蘋果有一些私有屬性

查看完整回答
反對 回復 2020-02-03
  • 3 回答
  • 0 關注
  • 963 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號