我正在进行同步过程,其中使用时间戳从具有RestKit的服务器加载最新更改的对象,并根据MOC构思使用Core Data保存所有更改。
序列
1)启动同步过程并将更改保存到核心数据[AppDelegate]
2)在处理完成后重新获取Core Data中的数据并重新加载数据[ContactTableView]
3)获取完成后重新加载输入视图[ContactDetailView]
4)重新加载置于ContactDetailView内的ViewContainer中的表视图[ContactDetailTV]
在视图之间传递数据
ContactTableView (passing object when user selects row)
--» ContactDetailView (passing object to subView in viewContainer)
--» ContactDetailTV (displaying data of object in a tableView)
问题
有效
当我在ContactTableView内部时,表视图会重新加载新获取的数据,一切都很好。
这不起作用
当我在ContactDetailTV内部时(因为我正在查看时数据会发生变化),即使在调用[self.tableView reloadData]之后,该视图也会显示ContactDetailTV内的旧数据。
问题
我做错了什么或者缺少什么让重装按预期工作?
代码的
的AppDelegate
- (void)startSyncProcess:(NSInteger)operationCode
{
// Init helper
syncCount = 0;
syncProcess = 0;
switch (operationCode)
{
default:
// (1) Request deleted companys from server
[self requestDeletedCompanysFromServer];
break;
case 0:
// (2) Request deleted contacts from server
[self requestDeletedContactsFromServer];
break;
case 1:
// (2) Request edited companys from server
[self requestEditedCompanysFromServer];
break;
case 2:
// (2) Request edited contacts from server
[self requestEditedContactsFromServer];
break;
case 3:
// Reload data views
[self saveCurrentSyncTime];
[[NSNotificationCenter defaultCenter] postNotificationName:@"updateTableViewAfterSave" object:self];
break;
}
}
ContactTableView
- (void)syncContextDidSave:(NSNotification*)saveNotification
{
// Handling the "updateTableViewAfterSave"-notification by refetching the data with Core Data
NSError *error;
if (![[self fetchedResultsController] performFetch:&error])
NSLog(@"[ERROR] Saving failed with error: %@", [error userInfo]);
[[NSNotificationCenter defaultCenter] postNotificationName:@"updateSubViewAfterSave" object:nil];
}
ContactDetailTV
- (void)updateSubViewAfterSave:(NSNotification *)saveNotification
{
// Handling the "updateSubViewAfterSave"-notification by updating the table view that displays the data without using a fetchedResultsController
[self.tableView reloadData];
}
答案 0 :(得分:1)
使用Core Data中的最新数据更新对象(因为即使在重新获取数据时,fetchedController的上下文保留了对象的“快照”),我也必须更新方法。
- (void)updateSubViewAfterSave:(NSNotification *)saveNotification
{
// Handling the "updateSubViewAfterSave"-notification by updating the table view that displays the data without using a fetchedResultsController
id appDelegate = (id)[[UIApplication sharedApplication] delegate];
NSManagedObjectContext *tempContext = [appDelegate managedObjectContext];
[tempContext refreshObject:contact mergeChanges:YES];
[self.tableView reloadData];
}