在从核心数据加载数据中获取特定值?

问题描述:

我取出由核心数据实体,但我不能访问该对象值赋给变量等在从核心数据加载数据中获取特定值?

这是我的代码:

@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() 
    } 


} 

打印(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; 
}) 

但我怎样才能访问例如“单词”的价值?它只返回此错误:

“ViewController.swift:36:23:类型 '元素'(又名 'AnyObject')的值没有成员 '字'”

我正尝试投“RES “成为NSManagedObject,但我似乎无法使它工作。

任何帮助?

你有两种选择。无论是使用键 - 值编码:

let results = try context.executeFetchRequest(request) 
for res in results { 
    print(res) 
    print(res.valueForKey("word")) 
} 

或(更好)使用 “Xcode->编辑 - >创建NSManagedObject子......”。 在Xcode 7中,这会将两个文件“Words.swift”和“Words + CoreDataProperties.swift”添加到您的项目中。

第一个文件 “Words.swift”定义了Word类(并且您可以扩展类 定义,例如添加自定义方法)。

第二个文件“词+ CoreDataProperties.swift” 包含了所有的核心数据的属性属性定义, 例如:

extension Words { 

    @NSManaged var word: String? 
    // ... 
} 

现在你可以施放从读取请求的对象到Word键入并直接访问属性:

let results = try context.executeFetchRequest(request) as! [Words] 
for res in results { 
    print(res) 
    print(res.word) 
} 
+0

太棒了!谢谢。 :) – Praise

+0

嗯。看起来我必须把Res当成词汇。如果我将数组转换为单词数组,res变量仍然是Element。当我解决它这样做:让结果:NSArray =尝试context.executeFetchRequest(请求) res中的结果{0} {0} {0}让nyRes = res as!单词 print(res) print(nyRes.word!) } 您是否知道如何使用Words数组解决问题的方法? – Praise

+0

@Plaise:我的错。类名称(通常)与实体名称相同,在您的案例中为“Words”。将结果数组转换为“[Words]”应该可行。 –