为什么不用这个NSPredicate工作?

我有一个由CoreData管理的对象列表。 我想使用NSPredicate从CoreData中获取特定的对象。 下面是我使用的代码。 数组arr总是返回0个对象,大概是因为抓取不能找到与谓词匹配的对象。 我知道一个事实,即CoreData中至少有一个对象具有与adUdid匹配的advertisement.uuid。 我已经手动获得了整个对象列表并自己搜索了uuid并找到了它。 广告是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;
        }
    }
}

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

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

不用担心引号,predicateWithFormat:会自动将右引号括起来。

编辑:参考:谓词编程指南

链接地址: http://www.djcxy.com/p/60629.html

上一篇: why wont this NSPredicate work?

下一篇: NSPredicate: filtering objects by day of NSDate property