亲爱的社区。 我发现使用核心数据时遇到了麻烦。这是描述: 从我的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才会有最终更新。 任何评论都会表示赞赏。
答案 0 :(得分:0)
在第一次获取时,您将获取实体DestinationsListForSale
,但在第二次获取时,您将获取实体DestinationsListWeBuy
。最简单的解释是,当应用于不同的实体时,相同的谓词不会产生相同的结果。
根据实体和任何时候持久存在的数据的具体情况,同一谓词在应用于不同实体时会产生不同的结果。
实际上,这将是预期的行为。