Ios ';任何对象';没有成员名称-访问核心数据时

Ios ';任何对象';没有成员名称-访问核心数据时,ios,swift,core-data,Ios,Swift,Core Data,我正在运行两组完全相同的代码,但是,我不明白为什么第二组代码会失败。如果我将行从 println(result.password)到println(result.token) 我收到一个错误,“AnyObject”没有名为“token”的成员。 以下是工作代码: override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically

我正在运行两组完全相同的代码,但是,我不明白为什么第二组代码会失败。如果我将行从
println(result.password)
println(result.token)

我收到一个错误,
“AnyObject”没有名为“token”的成员。

以下是工作代码:

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    var appDel: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
    var context: NSManagedObjectContext = appDel.managedObjectContext!
    var newUser = NSEntityDescription.insertNewObjectForEntityForName("Users", inManagedObjectContext: context) as! NSManagedObject

    newUser.setValue("test-1", forKey: "token")
    context.save(nil)

    var request = NSFetchRequest(entityName: "Users")
    var results = context.executeFetchRequest(request, error: nil)

    if results!.count > 0 {
        for result: AnyObject in results! {
            println(result.password)
        }
    } else {
        println("No results")
    }
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}
如果我将行更改为
println(result)
我将收到一个打印输出,显示有一个名为
token
的属性

<NSManagedObject: 0x7ffa2945c3a0> (entity: Users; id: 0xd000000000040000 <x-coredata://749CCE65-5C4A-45F2-839C-195A94AFCDB6/Users/p1> ; data: <fault>)
<NSManagedObject: 0x7ffa2945c400> (entity: Users; id: 0xd000000000080000 <x-coredata://749CCE65-5C4A-45F2-839C-195A94AFCDB6/Users/p2> ; data: <fault>)
<NSManagedObject: 0x7ffa2945c460> (entity: Users; id: 0xd0000000000c0000 <x-coredata://749CCE65-5C4A-45F2-839C-195A94AFCDB6/Users/p3> ; data: <fault>)
<NSManagedObject: 0x7ffa2964b360> (entity: Users; id: 0xd000000000100000 <x-coredata://749CCE65-5C4A-45F2-839C-195A94AFCDB6/Users/p4> ; data: {
    password = nil;
    token = "test-1";
    username = nil;
})
(实体:用户;id:0xd000000000040000;数据:)
(实体:用户;id:0xd000000000080000;数据:)
(实体:用户;id:0xd0000000000c0000;数据:)
(实体:用户;id:0xd000000000100000;数据:{
密码=零;
令牌=“测试-1”;
用户名=零;
})

我很惊讶,即使是
println(result.password)
也能工作。
问题在于
结果的类型。在for-In循环中,您明确告知Swift将
结果作为
任何对象提供

for result: AnyObject in results! {
    println(result.password)
}
现在没有任何名为
令牌
密码
的成员。因此,即使您存储的对象可能是具有这些属性的类型,您也无法访问这些属性。
因此,在能够访问这些属性之前,您必须向下转换到所需的类型。

这可以通过省略
:AnyObject
,假设
results
是所需类型的数组来实现。

那么result是什么类型的对象呢?你是说要做什么-为了结果中的结果!{}这样做,我会收到相同的错误。同样,密码是有效的。你的问题是什么?我省略了:但是,任何对象仍然收到相同的问题。也许我不完全理解你的答案。你也可以尝试
以获得结果!{println((结果为您的_对象).password)}
完全正确。在您的问题中,您没有提供
results
是什么类型,以及
result
应该是什么类型。因此,您可能必须将
result
强制转换为特定类型。如果你提供的类型,我可以编辑我的答案。。。