我在CoreData中有一个名为Devices的实体。设备具有以下属性: 名称,型号,制造商,所有者。所有属性都是字符串类型。我使用以下代码使用谓词
从实体设备中获取值 NSEntityDescription *entity = [NSEntityDescription entityForName:@"Devices" inManagedObjectContext:self.managedObjectContext];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entity];
request.fetchLimit = Device_LIMIT;
NSSortDescriptor *sortDisc = [NSSortDescriptor sortDescriptorWithKey:@"model" ascending:YES];
[request setSortDescriptors:@[sortDisc]];
NSError *error;
NSArray *array = [self.managedObjectContext executeFetchRequest:request error:&error];
if (array) {
arrName = [array valueForKey:@"Name"];
}
return arrName;
我通过这种方式得到了理想的结果。但是,我的问题是如何直接从Device Entity for Name属性中获取数组,而不添加任何if-else或for in条件。
答案 0 :(得分:0)
执行for循环以将值添加到arrName
:
NSMutableArray *arrName = [NSMutableArray new];
for (NSManagedObject *object in array) {
[arrName addObject:object[@"Name"]];
}
答案 1 :(得分:0)
仅当获取请求因错误而失败时才返回nil数组。
您的代码应该构造成如果没有数组,则应该处理错误。
编辑:对于大多数返回内容并在cocoa中将错误作为参数的方法来说,这是相当正确的。通常,如果没有返回任何内容,则应检查错误。
答案 2 :(得分:0)
方法executeFetchRequest
的返回值是一个对象数组,因此必须使用for循环来取出name属性。
答案 3 :(得分:0)
您需要从Core Data中获取一个数组才能获得这些值 - 这就是Core Data的工作原理。您可以将代码更改为使用NSDictionaryResultType
,但是您只需获取一个字典数组而不是托管对象数组。您正在做的事情是正确的,没有获取名称值而没有获取数组并从该数组中提取名称也没有捷径。