从获取请求 Swift 中检索对象

Posted

技术标签:

【中文标题】从获取请求 Swift 中检索对象【英文标题】:Retrieve object from fetch request Swift 【发布时间】:2017-06-10 02:41:13 【问题描述】:

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

【问题讨论】:

获取请求返回一个字典数组,您可以循环 endArray 并打印值。 @TusharSharma 是的,但它返回一个包含所有垃圾的数组。有没有办法只返回值的数组? 你可以从key中获取价值。 @TusharSharma 好吧,我希望仅将结果保存为值数组,因此如果只有 1 个值或 200 个值,我只想将值保存在数组中。你知道让它这样做的代码吗? 根据您的要求尝试以下代码。 【参考方案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

            


        

【讨论】:

我得到错误无法用“Device”类型的索引为 [Device] 类型的值下标【参考方案2】:

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

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

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

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

【讨论】:

【参考方案3】:

首先,如果您使用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) 

【讨论】:

以上是关于从获取请求 Swift 中检索对象的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Swift 中的 NSURLResponse 中检索 cookie?

检索 JSON 对象 Swift 2

尝试使用尚未从自身检索的数据后调用委托方法 didUpdateLocations - Xcode Swift

Firebase 在 Swift 中检索数据

从 HttpServletRequest 检索 JSON 对象文字

快速从 MKLocalSearch 对象中检索第一个“mapItem”元素