检索 ManagedObjects 的属性
Retrieving attributes for ManagedObjects
需要使用 Swift 访问核心数据记录。
理想情况下,我想将我的 class "Core Data" 称为 returns ManagedObject 或 false(不存在对象)。但是目前,当我想检索 ManagedObject 上的属性时,出现编译器错误 [NSManagedObject] 没有名为 'valueForKey'
的成员
我知道类似的问题(例如 swift optional chaining with cast),但我无法解决这个问题。需要帮助:)
为了进行故障排除,我正在尝试访问 class 中已有的属性(稍后将在 class 之外完成)。下面的代码。 为什么我会收到编译器错误以及如何修复它?
谢谢!
class CoreData{
// Fetch existing data (from Core Data)
func getData(entity: String) -> AnyObject {
// Set delegate
let appDelegate =
UIApplication.sharedApplication().delegate as AppDelegate
let managedContext = appDelegate.managedObjectContext!
// Get entity = a table (filter)
let fetchRequest = NSFetchRequest(entityName:entity)
// Create error variable
var error: NSError?
// Get record
let fetchedResults =
managedContext.executeFetchRequest(fetchRequest,
error: &error) as [NSManagedObject]?
if let results = fetchedResults {
// Data retrieved
var temp = results.valueForKey("gender") as String // <-- ERROR
println(temp)
return results
} else {
// Could not obtain data - log it
println("Could not fetch \(error), \(error!.userInfo)")
return false
}
}
}
NSArray
有一个 valueForKey
方法,但 Swift 数组没有。
您有以下选项:
将Swift数组转换为NSArray
:
var temp = (results as NSArray).valueForKey("gender") as! String
对 Swift 数组使用 map()
,对每个对象使用 valueForKey
:
var temp = map(results) { [=11=].valueForKey("gender") as! String }
(推荐) 让 Xcode 为您的实体创建 NSManagedObject
子类并将 map()
与 属性 存取器:
var temp = map(results) { [=12=].gender }
(以上示例代码针对当前Xcode6.3/Swift1.2,在较早的时候
您必须使用 as
而不是 as!
的版本。)
或者,您可以使用 .DictionaryResultType
创建一个获取请求以仅获取一些选定的属性,
参见 示例。
需要使用 Swift 访问核心数据记录。
理想情况下,我想将我的 class "Core Data" 称为 returns ManagedObject 或 false(不存在对象)。但是目前,当我想检索 ManagedObject 上的属性时,出现编译器错误 [NSManagedObject] 没有名为 'valueForKey'
的成员我知道类似的问题(例如 swift optional chaining with cast),但我无法解决这个问题。需要帮助:)
为了进行故障排除,我正在尝试访问 class 中已有的属性(稍后将在 class 之外完成)。下面的代码。 为什么我会收到编译器错误以及如何修复它?
谢谢!
class CoreData{
// Fetch existing data (from Core Data)
func getData(entity: String) -> AnyObject {
// Set delegate
let appDelegate =
UIApplication.sharedApplication().delegate as AppDelegate
let managedContext = appDelegate.managedObjectContext!
// Get entity = a table (filter)
let fetchRequest = NSFetchRequest(entityName:entity)
// Create error variable
var error: NSError?
// Get record
let fetchedResults =
managedContext.executeFetchRequest(fetchRequest,
error: &error) as [NSManagedObject]?
if let results = fetchedResults {
// Data retrieved
var temp = results.valueForKey("gender") as String // <-- ERROR
println(temp)
return results
} else {
// Could not obtain data - log it
println("Could not fetch \(error), \(error!.userInfo)")
return false
}
}
}
NSArray
有一个 valueForKey
方法,但 Swift 数组没有。
您有以下选项:
将Swift数组转换为
NSArray
:var temp = (results as NSArray).valueForKey("gender") as! String
对 Swift 数组使用
map()
,对每个对象使用valueForKey
:var temp = map(results) { [=11=].valueForKey("gender") as! String }
(推荐) 让 Xcode 为您的实体创建
NSManagedObject
子类并将map()
与 属性 存取器:var temp = map(results) { [=12=].gender }
(以上示例代码针对当前Xcode6.3/Swift1.2,在较早的时候
您必须使用 as
而不是 as!
的版本。)
或者,您可以使用 .DictionaryResultType
创建一个获取请求以仅获取一些选定的属性,
参见