Magicalrecord上的NSPredicate检索旧结果

时间:2013-07-10 19:54:48

标签: ios objective-c core-data magicalrecord

我不知道这是怎么回事,但我有一个相当复杂的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的对象:(如果我再次筛选可用它确实显示,但我在结果中得到的状态我得到了它,所以它基本上搜索旧数据。

当我用以下内容保存核心数据时

[[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];

1 个答案:

答案 0 :(得分:1)

Probanly Magical Record使用Core数据的获取请求进行获取。这个请求总是归结到商店。因此,它只能以保存的状态查找已保存的数据。

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