获取从 Core Data 加载数据的具体价值?
Getting the specific value in loading data from Core Data?
我正在从核心数据中获取实体,但我无法访问对象值来分配变量等。
这是我的代码:
@IBAction func loadItem(sender: UIButton) {
let appDel: AppDelegate = (UIApplication.sharedApplication().delegate as! AppDelegate)
let context: NSManagedObjectContext = appDel.managedObjectContext
let request = NSFetchRequest(entityName: "Words")
request.returnsObjectsAsFaults = false
do {
let results:NSArray = try context.executeFetchRequest(request)
for res in results{
print(res)
print(res.word)
}
} catch {
print("Unresolved error")
abort()
}
}
print(res) 工作正常并在控制台中给我对象:
<NSManagedObject: 0x7ff0095355f0> (entity: Words; id: 0xd000000000040000 <x-coredata://0E645702-9493-4D1A-8D55-4482B7948054/Words/p1> ; data: {
image = <89504e47 0d0a1a0a 0000000d 49484452 00000a6c 000006ec 08020000 009fcbb9 fc000001 18694343 50494343 2050726f 6669>;
word = test;
})
但是我如何访问 "word" 值?它只有 returns 这个错误:
"ViewController.swift:36:23: Value of type 'Element' (aka 'AnyObject') has no member 'word'"
我正在尝试将 "res" 转换为 NSManagedObject,但我似乎无法让它工作。
有什么帮助吗?
你有两个选择。要么使用键值编码:
let results = try context.executeFetchRequest(request)
for res in results {
print(res)
print(res.valueForKey("word"))
}
或者(更好)使用 "Xcode->Editor->Create NSManagedObject subclass ..."。
在 Xcode 7 中,这将向您的项目添加两个文件 "Words.swift" 和 "Words+CoreDataProperties.swift"。
第一个文件
"Words.swift" 定义了 Word
class(您可以扩展 class
定义例如添加自定义方法)。
第二个文件"Words+CoreDataProperties.swift"
包含所有 Core Data 属性的 属性 定义,
例如:
extension Words {
@NSManaged var word: String?
// ...
}
现在您可以将获取请求中的对象转换为 Word
类型并直接访问属性:
let results = try context.executeFetchRequest(request) as! [Words]
for res in results {
print(res)
print(res.word)
}
我正在从核心数据中获取实体,但我无法访问对象值来分配变量等。
这是我的代码:
@IBAction func loadItem(sender: UIButton) {
let appDel: AppDelegate = (UIApplication.sharedApplication().delegate as! AppDelegate)
let context: NSManagedObjectContext = appDel.managedObjectContext
let request = NSFetchRequest(entityName: "Words")
request.returnsObjectsAsFaults = false
do {
let results:NSArray = try context.executeFetchRequest(request)
for res in results{
print(res)
print(res.word)
}
} catch {
print("Unresolved error")
abort()
}
}
print(res) 工作正常并在控制台中给我对象:
<NSManagedObject: 0x7ff0095355f0> (entity: Words; id: 0xd000000000040000 <x-coredata://0E645702-9493-4D1A-8D55-4482B7948054/Words/p1> ; data: {
image = <89504e47 0d0a1a0a 0000000d 49484452 00000a6c 000006ec 08020000 009fcbb9 fc000001 18694343 50494343 2050726f 6669>;
word = test;
})
但是我如何访问 "word" 值?它只有 returns 这个错误:
"ViewController.swift:36:23: Value of type 'Element' (aka 'AnyObject') has no member 'word'"
我正在尝试将 "res" 转换为 NSManagedObject,但我似乎无法让它工作。
有什么帮助吗?
你有两个选择。要么使用键值编码:
let results = try context.executeFetchRequest(request)
for res in results {
print(res)
print(res.valueForKey("word"))
}
或者(更好)使用 "Xcode->Editor->Create NSManagedObject subclass ..."。 在 Xcode 7 中,这将向您的项目添加两个文件 "Words.swift" 和 "Words+CoreDataProperties.swift"。
第一个文件
"Words.swift" 定义了 Word
class(您可以扩展 class
定义例如添加自定义方法)。
第二个文件"Words+CoreDataProperties.swift" 包含所有 Core Data 属性的 属性 定义, 例如:
extension Words {
@NSManaged var word: String?
// ...
}
现在您可以将获取请求中的对象转换为 Word
类型并直接访问属性:
let results = try context.executeFetchRequest(request) as! [Words]
for res in results {
print(res)
print(res.word)
}