【发布时间】:2014-09-22 11:48:41
【问题描述】:
我已经使用 NSFetchedResultController 将数据加载到 UITableView 中。我正在使用 MagicalRecord 进行 coredata 操作。
我在默认上下文中创建了 NSFetchedResultsController,并在 didSelectRowAtIndexPath 上使用了它,如下所示
-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[tableView deselectRowAtIndexPath:indexPath animated:YES];
UserEntity * user = [userFetchedResultsController objectAtIndexPath:indexPath];
// do some changes to user Object
}
稍后在保存按钮单击操作时,我尝试像下面那样保存
[[NSManagedObjectContext defaultContext] saveToPersistentStoreWithCompletion:^(BOOL success, NSError *error) {
DLog(@" isSaved : %d ",success);
}];
但未保存更改,
2014-09-22 17:12:50.752 _block_invoke [Line 210] has Changed 1
2014-09-22 17:12:50.752 MR_saveWithOptions:completion:](0x7fca7214e7d0) → Saving <NSManagedObjectContext (0x7fca7214e7d0): *** DEFAULT ***> on *** MAIN THREAD ***
2014-09-22 17:12:50.753 MR_saveWithOptions:completion:](0x7fca7214e7d0) → Save Parents? 1
2014-09-22 17:12:50.753 MR_saveWithOptions:completion:](0x7fca7214e7d0) → Save Synchronously? 0
2014-09-22 17:12:50.759 MR_saveWithOptions:completion:](0x7fca7214c430) NO CHANGES IN ** BACKGROUND SAVING (ROOT) ** CONTEXT - NOT SAVING
2014-09-22 17:12:50.759 _block_invoke_2 [Line 213] isSaved : 0
显然 NSManagedObject 有 Changes ,但日志显示 No Changes ,谁能解释一下这个?
更新:
我可以在 defaultContext UpdatedObjects 列表中看到更改后的对象,但仍然没有保存不工作
DLog(@" updated Objects %@ ", [[NSManagedObjectContext defaultContext] updatedObjects]);
updated Objects {(
<UserEntity: 0x1780cd4a0> (entity: UserEntity; id: 0xd000000000040000 <x-coredata://1E0810DA-1A23-4337-B279-3957BE4D207F/UserEntity/p1> ; data: {
// entity data removed
})
)}
NO CHANGES IN ** BACKGROUND SAVING (ROOT) ** CONTEXT - NOT SAVING
任何建议都会很有帮助
更新 2:
下面是我如何创建 NSFetchedResultsController
-(NSFetchedResultsController*) userFetchedResultsController {
@autoreleasepool {
if(userFetchedResultsController == nil){
NSFetchRequest *fetchRequest = [UserEntity requestAllSortedBy:@"userName" ascending:YES];
[fetchRequest setFetchBatchSize:10];
NSFetchedResultsController *theFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:[NSManagedObjectContext defaultContext] sectionNameKeyPath:nil cacheName:nil];
userFetchedResultsController = theFetchedResultsController;
userFetchedResultsController.delegate = self;
}
return userFetchedResultsController;
}
}
【问题讨论】:
-
请在您进行更改的地方插入代码。然后,您可以记录 [context updatedObjects] 以查看哪些对象有更新:)
-
嗨 daniel,我可以在 updatedObjects 中看到更改后的 UserEntity 对象,但是当我尝试保存它时说像以前一样没有更改 ** 背景保存(根)** 上下文 - 不保存
-
为了更好地理解,我需要查看您正在使用哪些 NSManagedObjectContexts:设置获取的结果控制器并更新对象。
-
我使用了由魔法记录创建的 defaultContext,检查更新 2 以了解如何创建 NSFetchedResultsController
-
为了更新我使用任何上下文而不是我只需从 nsfetchedresultscontroller 获取数据并更新更改。
标签: ios core-data magicalrecord nsfetchedresultscontroller