直接从coredata实体

时间:2017-10-26 06:58:41

标签: ios objective-c core-data

我在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条件。

4 个答案:

答案 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,但是您只需获取一个字典数组而不是托管对象数组。您正在做的事情是正确的,没有获取名称值而没有获取数组并从该数组中提取名称也没有捷径。