使用NSString NSPredicate奇怪的崩溃

时间:2014-04-28 19:08:49

标签: ios objective-c core-data nspredicate

我正在尝试根据她的名字获取一个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'"];

一切正常。

2 个答案:

答案 0 :(得分:3)

请勿将谓词格式的%@占位符括在引号中:

[NSPredicate predicateWithFormat:@"categoria == %@", catName];

答案 1 :(得分:1)

catName 已经一个字符串,你不需要用引号括起来,它就像

一样
categoria == '@"Songs"'

删除它们:

@"categoria == %@"