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