为什么不用这个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