为什么这个NSPredicate不工作?

时间:2011-06-13 21:08:27

标签: iphone core-data static-libraries nspredicate

我有一个由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;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

您正在比较字符串,在这种情况下,LIKE是比==更好的运算符。所以:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"advertisement.uuid LIKE %@",adUdid];

不要担心引号,predicateWithFormat:会自动在右手术语周围加上单引号。

编辑: 参考:Predicate Programming Guide