Swift 正在检索ManagedObjects的属性

Swift 正在检索ManagedObjects的属性,swift,core-data,nsmanagedobject,Swift,Core Data,Nsmanagedobject,需要使用Swift访问核心数据记录 理想情况下,我希望调用我的类“核心数据”,它返回ManagedObject或false(不存在任何对象)。但是,当前当我要检索ManagedObject上的属性时,我得到编译器错误[NSManagedObject]没有名为“valueForKey”的成员 我知道类似的问题(例如),但我无法解决。需要帮助:) 对于疑难解答,我尝试访问类中已经存在的属性(稍后将在类外部完成)。代码如下为什么会出现编译器错误以及如何修复它? 谢谢 class CoreData{

需要使用Swift访问核心数据记录

理想情况下,我希望调用我的类“核心数据”,它返回ManagedObject或false(不存在任何对象)。但是,当前当我要检索ManagedObject上的属性时,我得到编译器错误[NSManagedObject]没有名为“valueForKey”的成员

我知道类似的问题(例如),但我无法解决。需要帮助:)

对于疑难解答,我尝试访问类中已经存在的属性(稍后将在类外部完成)。代码如下为什么会出现编译器错误以及如何修复它?

谢谢

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
        }
    }
}
类核心数据{
//获取现有数据(从核心数据)
func getData(实体:字符串)->AnyObject{
//集合委托
让appDelegate=
UIApplication.sharedApplication()
让managedContext=appDelegate.managedObjectContext!
//获取实体=表(筛选器)
let fetchRequest=NSFetchRequest(entityName:entity)
//创建错误变量
var错误:N错误?
//获得记录
让我们来看看结果=
managedContext.executeFetchRequest(fetchRequest,
错误:&错误)作为[NSManagedObject]?
如果let results=fetchedResults{
//检索到的数据

var temp=results.valueForKey(“性别”)作为字符串//
NSArray
有一个
valueForKey
方法,但Swift数组没有。 您有以下选项:

  • 将Swift数组转换为
    NSArray

    var temp = (results as NSArray).valueForKey("gender") as! String 
    
  • 对Swift数组使用
    map()
    ,对每个对象使用
    valueForKey

    var temp = map(results) { $0.valueForKey("gender") as! String }
    
  • (推荐)让Xcode为您的实体创建
    NSManagedObject
    子类,并将
    map()
    与属性访问器一起使用:

    var temp = map(results) { $0.gender }
    
(以上示例代码适用于早期版本中当前的Xcode 6.3/Swift 1.2 版本您必须使用
作为
而不是
作为!

或者,您可以使用
.DictionaryResultType
创建一个获取请求,以仅获取一些选定的属性,
参见示例。

Martin R-你就是那个人!现在阅读子类选项-看起来确实更好-谢谢你指出它!好奇者提出的关于字典方法的问题:如果你要求多属性和一个(或多个)属性不存在-提取会一起失败吗-或者带来确实存在的属性吗?再次感谢-让我开心一天-祝你周末愉快!@PederWessel:不客气!-如果
propertiesToFetch
包含任何不是实体实际属性的属性,那么提取请求将失败。谢谢Martin。享受w伊肯德