【问题标题】:'AnyObject' does not have a member name - when accessing core data'AnyObject' 没有成员名称 - 访问核心数据时
【发布时间】:2015-04-26 15:28:50
【问题描述】:

我正在运行两组相同的代码,但是,我不明白为什么第二组会失败。如果我将线路从
println(result.password) 更改为 println(result.token)
我收到'AnyObject' does not have a member named '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;
})

【问题讨论】:

  • 那么结果是什么类型的对象?

标签: ios swift core-data


【解决方案1】:

我很惊讶即使println(result.password) 也能正常工作。
问题是result 的类型。在您的 for-in-loop 中,您明确告诉 Swift 提供 result 作为 AnyObject

for result: AnyObject in results! {
    println(result.password)
}

现在AnyObject 没有任何名为tokenpassword 的成员。因此,您无法访问这些属性,即使您存储的对象可能是具有这些属性的类型。
因此,您必须先向下转换为所需的类型,然后才能访问这些属性。
这可以通过省略: AnyObject 来实现,假设results 是所需类型的数组。

【讨论】:

  • 你是说要做 - 为结果! { } 这样做,我收到同样的错误。再次,密码有效。
  • 你的问题是什么?
  • 我省略了:但是,AnyObject 仍然收到相同的问题。可能我没有完全理解你的回答。
  • 你也可以试试for result in results! { println((result as YOUR_OBJECT).password) }
  • 完全正确。在您的问题中,您没有提供 results 是什么类型,以及 result 应该是什么类型。因此,您可能必须将 result 强制转换为某种类型。如果您提供类型,我可以编辑我的答案...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-18
  • 1970-01-01
  • 2015-01-09
  • 1970-01-01
  • 1970-01-01
  • 2014-12-17
  • 1970-01-01
相关资源
最近更新 更多