2012-07-20 121 views
0

我使用这个代码来从核心数据的东西: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为什么? 感谢

+0

是什么'的输出[friendInfo objectForKey:@ “ID”] stringFromMD5]'? – holex 2012-07-20 13:07:18

+0

这是predicateString的“日志记录”标识符== 4ccb5c86bfe2407cbdb4142850c877ae“ – user1078065 2012-07-20 13:11:52

+1

您不应该使用'stringWithFormat:'并为谓词自己构建字符串,因为它可能需要一些不同的语法来构建predicateWithFormat:方法,但不能NSString的。例如,字符串被封装在''''中,这就是为什么你的谓词失败的原因。 – JustSid 2012-07-20 13:19:53

回答

2

请尝试以下方法,它可能会工作得很好:

NSPredicate *_predicate = [NSPredicate predicateWithFormat:@"%K == %@", @"identifier", [[friendInfo objectForKey:@"id"] stringFromMD5]]; 
+0

你为什么要编辑?它是一个完全有效的代码片段! – holex 2012-07-20 13:23:16

+0

我没有编辑它,但是关键路径的%K替换是不必要的。另外,因为它是一个例子,比'_pred'更清晰的变量名不会有问题。:) – 2012-07-20 13:28:22

+0

它不会崩溃,但知道谓词loged是'identifier ==“4ccb5c86bfe2407cbdb4142850c877ae”',而不是匹配搜索 – user1078065 2012-07-20 13:30:22