在我的核心數據模型中,我想要搜索與其他實體具有一對一關係並且具有所有10個屬性的實體。如果關鍵字出現在實體的任何地方(即使在子實體中),我也應該能夠打印相同的實體。在整個實體中搜索核心數據
使用枚舉塊,對我來說看起來不是一個好選擇。
如何在不影響性能的情況下進行搜索?
在我的核心數據模型中,我想要搜索與其他實體具有一對一關係並且具有所有10個屬性的實體。如果關鍵字出現在實體的任何地方(即使在子實體中),我也應該能夠打印相同的實體。在整個實體中搜索核心數據
使用枚舉塊,對我來說看起來不是一個好選擇。
如何在不影響性能的情況下進行搜索?
嘗試使用NSPredicate
:如果你回去與快速計數,並使用rangeOfString這樣你可以寫一個關鍵字和實體的NSFetchRequest
其實名稱:
NSString * lowerCaseTerm = [term lowercaseString];
NSString * content = [(NSString*)[theEntity valueForKey:"key"] lowercaseString];
BOOL containsWord = [content rangeOfString:lowerCaseTerm].location == NSNotFound ? false : true;
在哪裏「的內容「是您在實體中尋找的」NSString「,您將獲得比NSPredicate更好的性能。謂詞更優雅(代碼少得多),但比rangeOfString慢得多(需要一些設置)
如果你想查看一個實體的多個鍵,然後設置一個快速數組並循環。 @ [@ 「KEY1」,@ 「KEY2」];
我用這種方法不僅查找一個實體是否包含一個單詞,但也確定了相關性。 使用NSPredicate,需要7秒鐘的時間來搜索2000多個實體,並過濾掉那些不需要的然後再度假。
凡rangeOfString一切都花了大約0.25秒。輔助線程0.5秒。 (儀器爲我的具體情況報告我需要提供一個加權的相關性,爲客戶滿意度訂購的。)
(提示:在內容找詞就是掛斷了)
當然,你會想在執行此操作時使用輔助線程來防止您的UI被鎖定。如果需要更清晰的話請告訴我。
嗯,這是想法,但有超過100記錄每個記錄有10個實體,是大量的數據,因此希望更多的性能導向的方法 – Piyush
不要擔心性能,100個記錄是相當合理的(如果不小)數據量,即使是NSArray也是如此。 CoreData + Sqlite肯定能夠承擔這一數量的數據。您是否嘗試在執行提取時測量性能? – Leonardo
@Piyush NSPredicate/NSFetchRequest的確是API爲這類問題提供的。實現這一點,然後返回並開始一個新的線程,如果性能是不可接受的。 – bneely