2015-04-26 3 views
-1

У меня есть два одинаковых набора кода, однако я не понимаю, почему второй набор не работает. Если изменить линию от
println(result.password) к println(result.token)
Я получаю сообщение об ошибке из 'AnyObject' does not have a member named 'token'«AnyObject» не имеет имени элемента - при доступе к данным ядра

Вот рабочий код:

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; 
}) 
+1

Ну, какой тип объекта является результатом? – boidkan

ответ

0

Я удивлен, что даже println(result.password) работ.
Проблема: result. В вашем для-в-цикле вы явно указать Swift, чтобы обеспечить result как AnyObject:

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

Теперь AnyObject не имеет каких-либо членов называется token или password. Поэтому вы не можете получить доступ к этим свойствам, даже если объект, который вы храните, может иметь тип, который обладает свойствами.
Таким образом, вы должны сбрасывать требуемый тип, прежде чем сможете получить доступ к этим свойствам.
Этого можно добиться, опуская : AnyObject, считая, что results представляет собой массив желаемого типа.

+0

Вы хотите сделать - для получения результата! {} Выполнение этой задачи, я получаю ту же ошибку. Снова работает пароль. – bdizzle

+0

Что вы думаете? –

+0

Я пропустил: AnyObject, тем не менее, по-прежнему получает ту же проблему. Возможно, я не совсем понимаю ваш ответ. – bdizzle

Смежные вопросы