我有一个模态视图控制器,用户可以在其中输入或编辑数据。有一个保存和取消按钮。 因此,我为此viewController创建了一个新的NSManagedObjectContext并将其存储在属性中。
self.controllerContext = [NSManagedObjectContext MR_context];
然后,当用户编辑或输入数据时,我会将这些entites的entites和值创建到controllerContext中。
当用户点击取消按钮时,我会执行以下操作:
- (void)cancelButtonClicked {
[self.controllerContext rollback];
[self.controllerContext MR_saveToPersistentStoreWithCompletion:^(BOOL success, NSError *error) {
if (success || error == nil) {
[self dismissViewControllerAnimated:YES completion:nil];
} else {
if (error) {
[ErrorUtil logError:error fromAction:@"TagebuchDetailView Cancel"];
}
[SVProgressHUD showErrorWithStatus:error.localizedDescription];
[self dismissViewControllerAnimated:YES completion:nil];
}
}];
}
这非常好用,没有保存任何值。当用户点击保存按钮时,我会执行以下操作:
- (void)saveButtonClicked {
//Last modified setzen
self.selectedEintrag.lastModified = [NSDate date];
self.selectedEintrag.isDirty = [NSNumber numberWithBool:YES];
//Save Context and dismiss
self.subTitleView.navigationBarSubtitle = NSLocalizedString(@"view.subtitle.saving", nil);
[self.controllerContext MR_saveToPersistentStoreWithCompletion:^(BOOL success, NSError *error) {
if (success || error == nil) {
[self dismissViewControllerAnimated:YES completion:nil];
self.subTitleView.navigationBarTitle = nil;
} else {
if (error) {
[ErrorUtil logError:error fromAction:@"TagebuchDetailView Save"];
}
[SVProgressHUD showErrorWithStatus:error.localizedDescription];
[self dismissViewControllerAnimated:YES completion:nil];
}
}];
}
这也很好,但是iPhone2上的2-10个节目需要大约5-10秒,而iPhone5则需要3-5个。对于如此少量的保存数据,这似乎相当长。 我最近更新到MagicalRecord 2.2 Release。
任何想法可能是什么以及如何提高保存性能?也许是2.2中的错误?我使用以前版本的Magicalrecord,最近节省的性能变坏了。我不确定它最近是否会在iOS7上更新或测试。
答案 0 :(得分:0)
所以我自己发现了这个。问题是,controllerContext是默认上下文的子上下文。在另一个视图中,我有一个fetchedresultcontroller侦听默认上下文。保存控制器上下文时,它们似乎相互阻塞。 我的修复是,将控制器父上下文设置为根保存上下文。
self.controllerContext = [NSManagedObjectContext MR_contextWithParent:[NSManagedObjectContext MR_rootSavingContext]];
然后,一切都像魅力一样。