从获取请求Swift中检索对象

时间:2017-06-10 02:41:13

标签: ios swift core-data nsfetchrequest

我有一个名为“Device”的核心数据实体,其中包含一个名为“asset_tag”的属性以及以下代码:

var endArray: [Device] = []

var request = NSFetchRequest<NSFetchRequestResult>()
            request = Device.fetchRequest()
            request.returnsObjectsAsFaults = false

endArray = try context.fetch(request) as! [Device]

print (endArray)

这打印出以下内容:

[<Device: 0x608000092c00> (entity: Device; id: 0xd000000000140000 <x-coredata://22AC91EB-92B1-4E5B-A5A9-A5924E0ADD3E/Device/p5> ; data: {
    "asset_tag" = 26;
})]

我希望它打印出来的是['26']

3 个答案:

答案 0 :(得分:1)

试试这样 - :

func loadData(){
            let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext

            do{
              endArray = try context.fetch(request) as! [Device]
                for data in 0..< endArray!.count{
                    if let value = endArray?[data].value(forKey: "Your Key") {
                        print(value)
                    }
                }
            }catch{

            }


        }

答案 1 :(得分:0)

您之所以这样,是因为endArray[Device],这意味着其中的每个条目都是Device。打印数组时,得到的结果是在数组中的每个条目上调用debugDescription

如果您只想要数组中asset_tag属性的整数值,则可以使用map获取该数组:

let tagValues : [Int] = endArray.map { Int($0.asset_tag) }

这表示tagValues的类型为[Int],并且您使用mapendArray中的每个条目获取一个值来分配值。通过在每个条目上查找asset_tag的值来找到该值。结果是与Int值对应的asset_tag数组。

答案 2 :(得分:0)

首先,如果您使用NSManagedObject子类,请使用特定的提取请求来避免类型转换。 NSFetchRequest是引用类型。将请求声明为常量(let)。

获取请求始终返回实体[NSManagedObject]的数组。 垃圾非常重要。该对象可以包含许多属性和关系。

要获取特定属性的数组,请使用map函数

var endArray = [Device]()

let request : NSFetchRequest<Device> = Device.fetchRequest()
request.returnsObjectsAsFaults = false

do {
    endArray = try context.fetch(request)
    let tagArray = endArray.map { $0.asset_tag }
    print(tagArray)
} catch { print(error) }