2012-07-12 185 views
0

我正在將各種實體保存到核心數據中。每次我需要訪問這些數據時,我都會從Core數據中讀取數據,並將所需的實體分配給一個可變數組。從核心數據加載

if (managedObjectContext == nil) 
{ 
    managedObjectContext = [(iForgetAppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext]; 
} 
NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Event" inManagedObjectContext:managedObjectContext]; 
[request setEntity:entity]; 
NSError *error = nil; 
NSMutableArray *mutableFetchResults = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy]; 
if (mutableFetchResults == nil) 
{ 
    // Handle the error. 
    NSLog(@"mutableFetchResults == nil"); 
} 
[self setEventsArray:mutableFetchResults]; 
[eventsTableView reloadData]; 

問題是,我從應用程序中的許多不同頁面檢索這些數據。

使用核心數據時的最佳做法是什麼?我應該只在App Delegate中加載數據並將數組分配給那裏?

所有的建議非常感謝。

回答

1

您使用可變數組的設置已經是不好的做法。核心數據可以排序,過濾和顯示,可以說比可變數組好得多。

您應該考慮使用NSFetchedResultsController來顯示您的數據。您可以使用謂詞和排序描述符進行篩選和排序。這樣的解決方案應該是無限強大和可擴展的。

至於關於保存的具體問題,您可以使用託管對象上下文(在您的類中保留一個引用或從應用程序委託中獲取該對象)以將該數據保存到任何位置。

+0

(我已編輯我的問題)所以使用NSFetchedResultsController意味着我可以刪除所有上面的代碼,並只需調用NSFetchedResultsController每當我需要顯示數據?你知道這個很好的教程嗎? – Patrick 2012-07-12 20:59:17

+0

查看Apple示例項目[Core Data Books](http://developer.apple.com/library/ios/#samplecode/CoreDataBooks/Introduction/Intro.html#//apple_ref/doc/uid/DTS40008405-Intro- DontLinkElementID_2),它使用'NSFetchedResultsController'。 – Mundi 2012-07-13 08:40:20

1

使用NSFetchedResultsController可爲您提供所需的功能。確保也使用NSFetchedResultsControllerDelegate協議。使用NSFetchRequest做排序等檢索