从获取请求 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]
,并且您通过使用map
为endArray
中的每个条目获取一个值来分配一个值。该值是通过在每个条目上查找 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?
尝试使用尚未从自身检索的数据后调用委托方法 didUpdateLocations - Xcode Swift