ユーザーがデータを入力または編集できるモーダルビューコントローラーがあります。保存ボタンとキャンセルボタンがあります。したがって、このviewController用に新しいNSManagedObjectContextを作成し、プロパティに保存します。
self.controllerContext = [NSManagedObjectContext MR_context];
次に、ユーザーがデータを編集または入力している間に、エンティティとこれらのエンティティの値を 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];
}
}];
}
これも問題なく動作しますが、2 ~ 10 個のエンティティの保存には、iPhone4 では約 5 ~ 10 秒、iPhone5 では約 3 ~ 5 秒かかります。これは、保存されたデータの量が少ないため、かなり長いようです。最近、MagicalRecord 2.2 リリースに更新しました。
これが何であり、保存パフォーマンスを改善する方法はありますか? たぶん2.2のバグ?以前のバージョンの Magicalrecord を使用していたのですが、最近保存のパフォーマンスが低下しました。最近 iOS7 でマジカルレコードが更新されたのか、テストされたのかはわかりません。