iPhone核心数据不刷新表

问题描述:

我正在尝试使用核心数据编写应用程序,并且我已经能够成功读取和写入核心数据数据库。但是,如果我在一个视图控制器中写入数据库,我的其他视图控制器将不会看到更改,直到应用程序关闭然后重新打开。这真令人沮丧。我不完全确定如何使刷新方法起作用。我如何获得对管理对象的引用?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]; 

感谢您的帮助!

其实,我发现了,我不得不设置加载作为我的视图中的表。当我把表格放入另一个视图时,一切正常。

我不完全确定你打算做什么,我知道你正在一个视图控制器中更改托管对象上下文,并且希望结果在其他视图控制器中可见,这是正确的吗?反正一个解决方案是将监听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