2017-08-24 47 views
1

我有一個NSManagedObject它有一個(可轉換的)NSArray屬性arrayProperty基於數組屬性大小的NSFetchRequest

我想執行讀取請求的對象,它們的性質大小過濾小於5。我試圖

[NSPredicate predicateWithFormat:@"[email protected] <= 5"] 

[NSPredicate predicateWithFormat:@"arrayProperty[SIZE] <= 5"] 

但他們沒有工作(給Unsupported function expression countUnsupported function [SIZE] )。

有沒有辦法做到這一點?

+1

如果您從SQLite存儲中獲取,則不適用:可轉換存儲爲blob - CoreData無法將您的謂詞轉換爲可以分析blob的SQL where子句。要麼獲取所有內容並過濾內存,要麼檢查您的數組是否應該建模爲一對多關係。 – pbasdf

回答

2

這種東西不可能與可變形的屬性。 Transformable對於存儲數據非常方便,但是一旦存儲完畢,就只剩下一堆字節,並且沒有關於創建它們的數據結構的信息。 SQLite並不知道它是一個數組,所以它不能完成像數組中有多少項那樣的事情。

如果您使用可變形的屬性,您將失去基於它們進行過濾的能力,除非極其基本的測試,例如值是否爲零。

如果你需要做這種過濾,你需要考慮如何改變你的數據模型。一種可能性是,不是保存一個數組,而是創建一個具有多對多關係的新實體來存儲這些值。

+0

謝謝。這是我在想什麼,但無法在任何地方找到它。將添加一個NSNumber * arrayCount到我的模型中... – vib