为什么这个NSPredicate不起作用?

| 我有一个由CoreData管理的对象列表。我想使用NSPredicate从CoreData中获取特定对象。下面是我正在使用的代码。数组arr总是返回0个对象,大概是因为获取无法找到与谓词匹配的对象。我知道一个事实,即CoreData中至少有一个对象具有与adUdid匹配的advertise.uuid。我已经手动获取了整个对象列表,并自己在其中搜索了uuid并找到了它。广告是WebServiceAuthService_mobileAdvertisementVO的成员,而uuid是广告的成员。更重要的是,这个确切的代码在另一个项目中也可以正常工作。我无所适从,弄清楚了为什么该代码在新项目中不再起作用。 万一重要的是,此代码在我正在制作的静态库中。 编辑:arr总是空的,所以没有要发布的内容。也没有给出错误。它只是不工作。 uuid是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:会自动在右手边加上单引号。 编辑: 参考:谓词编程指南     

要回复问题请先登录注册