我有一个由CoreData管理的对象列表。我想使用NSPredicate从CoreData中获取特定对象。下面是我正在使用的代码。数组arr总是返回0中的对象,大概是因为fetch不能找到与谓词匹配的对象。我知道CoreData中至少有一个对象有一个与adUdid匹配的ads.uuid。我手动获取了整个对象列表并自己搜索了uuid并找到了它。 advertisement是WebServiceAuthService_mobileAdvertisementVO的成员,uuid是广告的成员。什么更加聚合的事实是这个确切的代码在另一个项目中运行得很好。我不知道为什么这个代码不再适用于新项目。
重要的是这个代码在我正在制作的静态库中。
编辑: arr始终为空,因此无需发布。也没有错误。它只是不工作。 uuids是NSStrings的“9ca98efe-ef48-47c0-aff5-058224b3093d”。我有一种感觉,问题可能在代码的其他地方,只是在这里表现出来。
WebServiceAuthService_mobileAdvertisementVO *mobileAd = nil;
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"WebServiceAuthService_mobileAdvertisementVO" inManagedObjectContext:managedObjectContext];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"advertisement.uuid == %@",adUdid];
[fetchRequest setEntity:entity];
[fetchRequest setPredicate:predicate];
NSError *error = nil;
NSArray *arr = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
[fetchRequest release];
if (error)
{
DLog(@"fetched special ad error: %@",[error localizedDescription]);
}
if (arr && [arr count] >= 1)
{
DLog(@"found ad with UUID %@",adUdid);
for (WebServiceAuthService_mobileAdvertisementVO *obj in arr)
{
NSManagedObjectID *objID = [obj objectID];
if (![objID isTemporaryID])
{
mobileAd = obj;
}
}
}
答案 0 :(得分:0)
您正在比较字符串,在这种情况下,LIKE是比==更好的运算符。所以:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"advertisement.uuid LIKE %@",adUdid];
不要担心引号,predicateWithFormat:会自动在右手术语周围加上单引号。
编辑: 参考:Predicate Programming Guide