0

ユーザーがデータを入力または編集できるモーダルビューコントローラーがあります。保存ボタンとキャンセルボタンがあります。したがって、この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 でマジカルレコードが更新されたのか、テストされたのかはわかりません。

4

1 に答える 1

0

だから私はこれを自分で見つけました。問題は、controllerContext がデフォルト コンテキストの子コンテキストであるということでした。別のビューでは、デフォルトのコンテキストでリッスンする fetchedresultcontroller がありました。コントローラーのコンテキストを保存すると、お互いをブロックしているように見えます。私の修正は、コントローラーの親コンテキストをルート保存コンテキストに設定することでした。

self.controllerContext = [NSManagedObjectContext MR_contextWithParent:[NSManagedObjectContext MR_rootSavingContext]];

その後、すべてが魅力的に機能します。

于 2013-11-04T22:03:33.623 に答える