我正在尝试根据她的名字获取一个CoreData实体,为此创建一个接受名称参数(NSString)的方法,所以这就是方法:
-(void)pegarCategoryByName:(NSString *)catName {
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc]init];
NSLog(@"Category Name: %@", catName);
NSError *error = nil;
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Categorias" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"categoria == '%@'", catName];
[fetchRequest setPredicate:predicate];
// [fetchRequest setFetchLimit:1];
NSArray *fetchedObjects = [[self managedObjectContext]executeFetchRequest:fetchRequest error:&error];
if (fetchedObjects.count > 0) {
_categoriaAtual = [fetchedObjects objectAtIndex:0];
} else {
NSLog(@"Category not Found");
}
}
所以我可以说我在我的代码中的某个地方打电话:
[self pegarCategoryByName:@"Songs"];
当我运行时,我得到NSLog:类别名称歌曲,未找到类别,他们应用程序崩溃。
奇怪的是,如果我将pegarCategoryName上的NSPredicate更改为不使用传递的NSString,这里是示例:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"categoria == 'Songs'"];
一切正常。
答案 0 :(得分:3)
请勿将谓词格式的%@
占位符括在引号中:
[NSPredicate predicateWithFormat:@"categoria == %@", catName];
答案 1 :(得分:1)
catName
已经一个字符串,你不需要用引号括起来,它就像
categoria == '@"Songs"'
删除它们:
@"categoria == %@"