2010-01-29 89 views
3

我正在嘗試使用核心數據編寫應用程序,並且我已經能夠成功讀取和寫入核心數據數據庫。但是,如果我在一個視圖控制器中寫入數據庫,我的其他視圖控制器將不會看到更改,直到應用程序關閉然後重新打開。這真令人沮喪。我不完全確定如何使刷新方法起作用。我如何獲得對管理對象的引用?iPhone核心數據不刷新表

無論如何,這裏是我用來讀取數據的代碼。這是在viewDidLoad方法中。

NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Website" inManagedObjectContext:managedObjectContext]; 
[request setEntity:entity]; 

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"siteName" ascending:NO]; 
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil]; 
[request setSortDescriptors:sortDescriptors]; 
[sortDescriptor release]; 
[sortDescriptors release]; 

NSError *error = nil; 
NSMutableArray *mutableFetchResults = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy]; 
if(mutableFetchResults == nil) { 
    //Handle the error 
} 

[self setNewsTitlesArray:mutableFetchResults]; 
[mutableFetchResults release]; 
[request release]; 

[newsSourcesTableView reloadData]; 

感謝您的幫助!

回答

-1

其實,我發現了,我不得不設置加載作爲我的視圖中的表。當我把表格放入另一個視圖時,一切正常。

3

我不完全確定你打算做什麼,我知道你正在一個視圖控制器中更改託管對象上下文,並且希望結果在其他視圖控制器中可見,這是正確的嗎?反正一個解決方案是將監聽NSManagedObjectContextDidSaveNotification(這是送當上下文被保存),並註冊爲一個觀察者要被改變受其影響視圖控制器:在myController的

NSNotificationCenter *dnc = [NSNotificationCenter defaultCenter]; 
[dnc addObserver:myController selector:@selector(updateTable:) name:NSManagedObjectContextDidSaveNotification object:controller.context]; 

的updateTable控制器的選擇器可能看起來像這樣:

- (void)updateTable:(NSNotification *)saveNotification 
{ 
if (fetchedResultsController == nil) 
{ 
    NSError *error; 
    if (![[self fetchedResultsController] performFetch:&error]) { 
    //Update to handle the error appropriately. 
     NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
     exit(-1); // Fail 
    }  
} 
else 
{ 
    NSManagedObjectContext *context = [fetchedResultsController managedObjectContext]; 
    // Merging changes causes the fetched results controller to update its results 
    [context mergeChangesFromContextDidSaveNotification:saveNotification]; 
    [self.tableView reloadData]; 
} 

希望有所幫助。

-Oscar