IOS NSPredicate崩溃时
我使用这个代码来从核心数据的东西:IOS NSPredicate崩溃时
NSFetchRequest *req = [[NSFetchRequest alloc] initWithEntityName:@"Friend"];
NSString *predicateString = [NSString stringWithFormat:
@"identifier == %@", [[friendInfo objectForKey:@"id"] stringFromMD5]];
NSPredicate *predicate = [NSPredicate predicateWithFormat:predicateString];
req.predicate = predicate;
req.fetchLimit = 1;
NSError *requestError = nil;
NSArray *tmp = [self.managedObjectContext executeFetchRequest:req error:&requestError];
但它崩溃的
NSString *predicateString = [NSString stringWithFormat:
@"identifier == %@", [[friendInfo objectForKey:@"id"] stringFromMD5]];
如果我删除stringFromMD5方法调用,它的工作原理。
NSString *predicateString = [NSString stringWithFormat:
@"identifier == %@", [friendInfo objectForKey:@"id"]];
任何ideea为什么? 感谢
请尝试以下方法,它可能会工作得很好:
NSPredicate *_predicate = [NSPredicate predicateWithFormat:@"%K == %@", @"identifier", [[friendInfo objectForKey:@"id"] stringFromMD5]];
你为什么要编辑?它是一个完全有效的代码片段! – holex 2012-07-20 13:23:16
我没有编辑它,但是关键路径的%K替换是不必要的。另外,因为它是一个例子,比'_pred'更清晰的变量名不会有问题。:) – 2012-07-20 13:28:22
它不会崩溃,但知道谓词loged是'identifier ==“4ccb5c86bfe2407cbdb4142850c877ae”',而不是匹配搜索 – user1078065 2012-07-20 13:30:22
是什么'的输出[friendInfo objectForKey:@ “ID”] stringFromMD5]'? – holex 2012-07-20 13:07:18
这是predicateString的“日志记录”标识符== 4ccb5c86bfe2407cbdb4142850c877ae“ – user1078065 2012-07-20 13:11:52
您不应该使用'stringWithFormat:'并为谓词自己构建字符串,因为它可能需要一些不同的语法来构建predicateWithFormat:方法,但不能NSString的。例如,字符串被封装在''''中,这就是为什么你的谓词失败的原因。 – JustSid 2012-07-20 13:19:53