2014-03-13 31 views
0

使用CoreData和NSFetchedResultController發現了真正奇怪的問題。使用NSFetchedResultController委託使用BOOL和重新加載數據的NSPredicate

我展示從該謂詞返回一個UITableView(使用NSFetchedResultController)元素:

NSPredicate *activeFilterPredicate = [NSPredicate predicateWithFormat:@"(SUBQUERY(properties, $x, ($x.type == %@) AND ($x.deleted == %@))[email protected] > 0)", @"sales/lead", [NSNumber numberWithBool:NO]]; 

它正常工作時我手動重新加載元件或如果我修改它們上相同的NSManagedObjectContext。 我的應用程序也從web服務器更新自己 - 比在子線程上我正在修改它並通過父子關係保存。

NSFetchedResultsController委託的所有方法都能正常工作 - 對於其他NSPredicates,我在那裏一切正常。

1天分析,並試圖敲定看來問題是這部分中的問題後:

($x.deleted == %@). 

看來,當它被用孩子方面修改,父上下文的NSPredicate不工作正確,而不是過濾出它應該的條目。

當我將屬性切換到NSString而不是NSNumber,並且我將YES/NO編碼到NSString中 - 它工作。

有沒有人有這個問題,現在如何克服它?我想在最後切換到使用BOOL屬性。

我已經試過(刪除== NO) - 不利於

+1

重複的[核心數據布爾鍵值更改不反映在提取](http://stackoverflow.com/questions/18107286/core-data-boolean-key-value-change-not-reflected-in-fetch) ? - 您不應該將關係稱爲「已刪除」。 –

回答

0

讀取結果控制器與關係謂詞是一個大問題。我在我們自己的應用程序中也看到了這一點。我從7月03日開始爲此問題開放了一個錯誤報告(rdar:// 14373992),但它是開放的。

作爲一種解決方法,我們結束了對數據的非規範化操作,並且基本上每次更改關係時更新主對象的屬性。無論如何,這是一個更好的解決方案,因爲在讀取結果控制器中訪問該屬性比對每個對象迭代關係的性能高得多。

相關問題