我在我的iPhone應用程序上使用核心數據來存儲大約1000個對象。每個對象都被分配了5個不同的組中的一個。隨着時間的推移,對象會更改組,並且在每個組內,這些組中對象的順序會發生更改並存儲在數組中。快速核心數據導入問題
然後,我拿這個數組,並使用'name'屬性將它存儲到plist。當我重新啓動應用程序時,我的AppDelegate會掃描數據庫中的每個對象,然後將其與我的plist中的'name'屬性進行比較。完成後,我有5個核心數據對象數組,按組排序,每個數據對象都以原始保存的順序排列。最終的結果是好的。完成此任務所需的時間不是。
我想讓這個更快。如果我可以將實際的核心數據對象數組保存到我的plist,我會這樣做。但我只能保存屬性。
蘋果對實施documentation查找或 - 創建高效,具體而言,此代碼:
// get the names to parse in sorted order
NSArray *employeeIDs = [[listOfIDsAsString componentsSeparatedByString:@"\n"]
sortedArrayUsingSelector: @selector(compare:)];
// create the fetch request to get all Employees matching the IDs
NSFetchRequest *fetchRequest = [[[NSFetchRequest alloc] init] autorelease];
[fetchRequest setEntity:
[NSEntityDescription entityForName:@"Employee" inManagedObjectContext:aMOC]];
[fetchRequest setPredicate: [NSPredicate predicateWithFormat: @"(employeeID IN %@)", employeeIDs]];
// make sure the results are sorted as well
[fetchRequest setSortDescriptors: [NSArray arrayWithObject:
[[[NSSortDescriptor alloc] initWithKey: @"employeeID"
ascending:YES] autorelease]]];NSError *error = nil;
NSArray *employeesMatchingNames = [aMOC
executeFetchRequest:fetchRequest error:&error];
然而,fetchRequest設置一個SortDescriptor和排序使用「僱員」的關鍵。我試過這個。我有一個ID鍵屬性,可以在將對象添加到組中時保存數組索引位置。但是,由於正在從每個組添加和刪除對象,對象的索引不斷變化。所以每次更改後,我都必須重新掃描每個組並重置索引。對我而言,這隻會將我的速度問題轉移到我的程序的另一部分。
我的問題是:有沒有更好的方法來保存對象在數組中的索引位置?還是有一個不同的地方,我可以存儲一個核心數據對象的數組?但是,如果我做了後者,因爲我的應用程序已經在appStore中,我的理解是如果我將屬性或表添加到數據庫中,這會在用戶升級時導致問題。
我希望我解釋得很好。任何幫助將不勝感激,謝謝。