2015-05-12 2 views
-1

Здравствуйте, я хочу получить некоторые данные из моего класса parse.com под названием «Метки» в этом классе, есть два 3 cols «objectID», «username» и «tagtext». Я хочу прочитать запись по идентификатору и послесловию, я хочу сохранить «имя пользователя» и «тегтекст» в две строки. Я сделал это, как это есть в документации parse.com:Ошибка при получении данных с parse.com

@IBAction func readAction(sender: UIButton) { 

    var query = PFQuery(className:"Tags") 
    query.getObjectInBackgroundWithId("IsRTwW1dHY") { 
     (gameScore: PFObject?, error: NSError?) -> Void in 
     if error == nil && gameScore != nil { 
      println(gameScore) 
     } else { 
      println(error) 
     } 
    } 

    let username = gameScore["username"] as! String 
    let tagtext = gameScore["tagtext"] as! String 

    println(username) 
    println(tagtext) 

} 

Я получаю сообщение об ошибке под названием fatal error: unexpectedly found nil while unwrapping an Optional value, скажите, пожалуйста, что это неправильно в моем коде.

Мой класс:

enter image description here

ответ

1

Проблема заключается в том, что:

let username = gameScore["username"] as! String 
let tagtext = gameScore["tagtext"] as! String 

gameScore["username"] и gameScore["tagtext"] могут возвращать нулевые значения, и когда вы говорите as! String вы говорите, что это будет строка, и это ничто.

Try что-то вроде:

let username = gameScore["username"] as? String 
let tagtext = gameScore["tagtext"] as? String 

ваша ошибка происходит из-за этого, но ваш окончательный код должен выглядеть следующим образом:

@IBAction func readAction(sender: UIButton) { 

    var query = PFQuery(className:"Tags") 
    query.getObjectInBackgroundWithId("f3AXazT9JO") { 
    (gameScore: PFObject?, error: NSError?) -> Void in 

    let username = gameScore["username"] as? String 
    let tagtext = gameScore["tagtext"] as? String 

    println(username) 
    println(tagtext) 
    if error == nil && gameScore != nil { 
     println(gameScore) 
    } else { 
     println(error) 
    } 
    } 
} 

Поскольку getObjectInBackgroundWithId является асинхронной.

+0

Это правильно, и мой класс не пуст, см. Обновленный ответ. –

+0

Я использовал ваш код, и я получаю следующую ошибку: '' AnyObject? ' не конвертируется в 'String'' –

+0

В строках 'let username = gameScore [" username "] as String? let tagtext = gameScore ["tagtext"] as String? ' –

1

Вы пытаетесь прочитать из своего объекта ответа gameScore, но он по-прежнему nil, потому что getObjectInBackgroundWithId - это асинхронный метод, означающий, что он вернет результат после его завершения. Поместите две строки внутри обработчика и начните оттуда.

+0

Я хочу только один результат, если я скопирую две строки внутри обработчика, я получаю сообщение об ошибке «AnyObject»? не конвертируется в 'String' ' –

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