从提取请求中检索对象 Swift

Retrieve object from fetch request Swift

我有一个名为 "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']

这样试试-:

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{

            }


        }

你明白了,因为 endArray 是一个 [Device],这意味着其中的每个条目都是一个 Device。当您打印数组时,您得到的是对数组中的每个条目调用 debugDescription 的结果。

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

获取该数组
let tagValues : [Int] = endArray.map { Int([=10=].asset_tag) }

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

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

提取请求returns 始终是实体[NSManagedObject] 的数组。 垃圾很重要。该对象可以包含许多属性和关系。

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

var endArray = [Device]()

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

do {
    endArray = try context.fetch(request)
    let tagArray = endArray.map { [=10=].asset_tag }
    print(tagArray)
} catch { print(error) }