我不知道这是怎么发生的,但是我有一个相当复杂的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]

它没有显示我刚刚设置为Rented的对象:(如果再次过滤为Available,它的确会显示,但是我在对象中的状态显示为Rented,因此它基本上可以搜索旧数据。

当我使用以下命令保存核心数据时:
[[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];

最佳答案

可能是Magical Record用Core数据的获取请求来进行获取。此请求始终下达商店。因此,它仅在其保存状态下查找保存的数据。

通过Core Data的提取请求,您可以通过将includePendingChanges设置为YES来更改此行为。我认为Magical Record支持类似的功能。

关于ios - NSPredicate on Magicalrecord检索旧结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17579751/

10-11 19:22