1

新しいバージョンのRestKitと複数のMOCを使用したのはこれが初めてなので、これは少し困惑しました。私はRestKit 0.20-pre5を使用しており、アプリケーション全体でRestKit操作と手動で管理対象オブジェクトを追加しています。

RestKits は、パフォーマンスを管理するために、mainQueue および PersistantStore オブジェクト コンテキストの 2 つの MOC を提供します。RestKits コードを検査すると、すべての新しい管理対象オブジェクトが mainQueue MOC に保存されます (RKObjectManager 行 433 とさまざまなポインター アドレスの検査に基づきます)。RestKit によって作成されたオブジェクトは正常に永続化されますが (もちろん、save を呼び出した後)、同じ mainQueue MOC で独自の ManagedObjects を作成して保存すると、アプリケーションを再起動しても永続化されません。(私は関連する MOC を頻繁に保存します)

ここで永続ストアの出番です。永続ストアを mainQueue MOC と共に保存すると、データは永続化されます。これは、(通知を介して)persistantStoreMOCでsaveを呼び出すたびに、RKManagedObjectStoreのマージ変更と関係があると思います。

問題は、両方のコンテキストを保存するたびに、少なくとも 1 秒続く顕著な遅延があることです (最大 3 秒まで変化する可能性があります!)。この遅延は、作成する NSManagedObjects が増えるほど増加するようです。計測器を実行しましたが、メモリの問題はありません。コア データの RestKits 実装を間違って使用しているに違いありません。

レコードについては、次の方法を使用して保存しています。

- (void)saveContext
{
    __block BOOL _blockSuccess;
    __block NSError *_blockError;

    NSManagedObjectContext *persistantContext = [[[RKObjectManager sharedManager] managedObjectStore] persistentStoreManagedObjectContext];

    [globalManagedObjectContext performBlockAndWait:^{
            _blockSuccess = [globalManagedObjectContext save:&_blockError];
    }];
    if (! _blockSuccess) NSLog(@"Failed to save context: %@", _blockError);

    [persistantContext performBlock:^{
        _blockSuccess = [persistantContext save:&_blockError];
        if (! _blockSuccess) NSLog(@"Failed to save context: %@", _blockError);
    }];
}

これは、アプリケーションの状態を保存したいときはいつでもシングルトン オブジェクトから呼び出されます。(globalManagedObjectContext は、RestKits mainQueueObjectContext を指す単なるマクロです)。persistantContext の保存を削除すると、ラグが削除されますが、もちろんデータは保持されません。

誰でも助けてくれます(特にBlake Watters ;)大歓迎です!

乾杯、

アロン

4

1 に答える 1

1

答えはsaveToPersistentStore:、RKAdditionsカテゴリによってNSManagedObjectContextに追加されたメソッドを使用することだと思います。

これはここここから取られています。

それを使用するときにまだ問題がありますか?

于 2013-02-13T20:48:05.870 に答える