1

これがどのように起こっているのかわかりませんが、かなり複雑な NSPredicate があります:

NSString rentalStatus = @"Available";
[NSPredicate predicateWithFormat:@"(status != nil) AND (status == %@)", rentalStatus]

次に、次のように検索します。

rentals = [RegisterSaleRental findAllSortedBy:@"rental_due_date" ascending:NO withPredicate:predicate];

すべて問題ありませんが、状態を [使用可能] から [レンタル済み] にすばやく設定すると、オブジェクトは画面上で [レンタル済み] と表示されます (ステータスが設定されます) が、[レンタル済み] をフィルターしようとすると:

NSString rentalStatus = @"Rented";
[NSPredicate predicateWithFormat:@"(status != nil) AND (status == %@)", rentalStatus]

レンタル済みに設定したばかりのオブジェクトは表示されません:(利用可能で再度フィルタリングすると表示されますが、結果のオブジェクトで得られるステータスはレンタル済みであるため、基本的に古いデータを検索します。

コアデータを次のように保存すると:

[[NSManagedObjectContext defaultContext] saveToPersistentStoreAndWait];

それはあり、完全に正常に動作します。私の質問は、ステータスなどを変更する前に毎回保存する必要がありますか? これが必要な場所はどこにもありません。ありがとう!

更新 (コア データ セットアップ コード)

// Configure MagicalRecord to use RestKit's Core Data stack
    [NSPersistentStoreCoordinator MR_setDefaultStoreCoordinator:managedObjectStore.persistentStoreCoordinator];
    [NSManagedObjectContext MR_setRootSavingContext:managedObjectStore.persistentStoreManagedObjectContext];
    [NSManagedObjectContext MR_setDefaultContext:managedObjectStore.mainQueueManagedObjectContext];
4

1 に答える 1

1

おそらくMagical Recordはコアデータの取得リクエストで取得を行います。このリクエストは常にストアに送信されます。したがって、保存された状態の保存されたデータのみが検索されます。

Core Data のフェッチ リクエストでは、includePendingChanges を YES に設定することで、この動作を変更できます。Magical Record も同様の機能をサポートしていると思います。

于 2013-07-10T20:10:14.170 に答える