谓词获取所有对象

时间:2014-01-14 19:13:56

标签: ios objective-c core-data nspredicate

我试图为获取特定对象而制作NSPredicate。问题是NSPredicate获取所有对象而不是仅获取特定对象。我做错了什么?

我的代码看起来像这样:

- (void)fetchDevices {
    // Fetch the devices from persistent data store

    NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
    devices = [[managedObjectContext executeFetchRequest:fetchRequest error:nil] mutableCopy];
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Songs"];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Songs" inManagedObjectContext:managedObjectContext];
    [fetchRequest setEntity:entity];
    // retrive the objects with a given value for a certain property
    NSPredicate *predicate = [NSPredicate predicateWithFormat: @"%d == %d", currentRow,      [device valueForKey:@"selectedRow"]];

    [fetchRequest setPredicate:predicate];

}

属性和变量:

@property (strong) NSMutableArray *devices;
currentRow = indexPath.row;
[device valueForKey:@"selectedRow"] 

[device valueForKey:@" selectedRow"](这是存储在我的核心数据实体中的INT)

1 个答案:

答案 0 :(得分:1)

很难从你的问题中说出来,因为不清楚Songs实体上存在哪些属性或者你想如何匹配它们。但是这个谓词的主要问题是:

NSPredicate *predicate = [NSPredicate predicateWithFormat: @"%d == %d", currentRow,      [device valueForKey:@"selectedRow"]];

...是尝试匹配Songs实体上的任何内容。谓词字符串需要包含您要获取的实体类型中的一个属性名称。或者,如果您在局部变量中有属性名称(可能是[device valueForKey:@"selectedRow"]是什么?),则需要在谓词中使用%K。你所拥有的是一个谓词,其中双方都是整数值,我保证属性 name 不是整数。

同样,如果没有更好地解释你想要做什么,我不能告诉你你的谓词应该是什么。但格式字符串的左侧确实需要文字属性名称或匹配属性名称的%K才能有效过滤。