每个方法制作两个不同的获取请求 - 看起来不可能

时间:2010-12-02 14:53:44

标签: cocoa core-data

亲爱的社区。 我发现使用核心数据时遇到了麻烦。这是描述: 从我的AppDelegate我打电话给我自己的班级:

InitUpdateIXC *initAndUpdate = [[[InitUpdateIXC alloc] init] autorelease];
[initAndUpdate updateCarrierList:self.managedObjectContext];

然后我使用了几个方法,它们更新了managedObjectContext,插入,添加了一些实体e.t.c。

在这种情况下,我发现每种方法使用谓词两次的限制: 首先使用工作正常,我在请求中看到结果:

NSFetchRequest *requestDestinationsForSale = [[NSFetchRequest alloc] init];
[requestDestinationsForSale setEntity:[NSEntityDescription entityForName:@"DestinationsListForSale"
                               inManagedObjectContext:managedObjectContext]];

[requestDestinationsForSale setPredicate:[NSPredicate predicateWithFormat:@"carrier.name like %@",carrierName]];

NSArray *destinationsForSale = [managedObjectContext executeFetchRequest:requestDestinationsForSale error:&error];

围绕MO的循环:

for (NSManagedObject *destinationForSale in destinationsForSale)
{
    for (NSManagedObject *code in [destinationForSale valueForKey:@"codesvsDestinationsList"])
    {

我尝试制作新的fetchRequest:

NSFetchRequest *requestDestinationWeBuy = [[[NSFetchRequest alloc] init] autorelease];
[requestDestinationWeBuy setEntity:[NSEntityDescription entityForName:@"DestinationsListWeBuy"
                                            inManagedObjectContext:managedObjectContext]];
NSError *error = nil; 
[requestDestinationWeBuy setPredicate:[NSPredicate predicateWithFormat:@"carrier.name like %@",carrierName]];
NSArray *destinationWeBuyList = [managedObjectContext executeFetchRequest:requestDestinationWeBuy error:&error];

ops ... NSArray是空的...... 如果我从AppDelegate调用方法时也这样做:     [initAndUpdate updateRoutingTable:self.managedObjectContext];

它是一个相同的类,相同的方法,只是从主AppDelegate调用,并且使用刚刚管理的上下文稍有改变,一切正常。

看起来,只有当我们离开进行更新的类方法时,managedObjectContext才会有最终更新。 任何评论都会表示赞赏。

1 个答案:

答案 0 :(得分:0)

在第一次获取时,您将获取实体DestinationsListForSale,但在第二次获取时,您将获取实体DestinationsListWeBuy。最简单的解释是,当应用于不同的实体时,相同的谓词不会产生相同的结果。

根据实体和任何时候持久存在的数据的具体情况,同一谓词在应用于不同实体时会产生不同的结果。

实际上,这将是预期的行为。