2015-02-20 2 views
1

Вот мой код:быстро - получить ObjectId поля вызывает фатальную ошибку

@IBAction func saveSettings(sender: AnyObject) { 
    var settings:PFObject = PFObject(className: "Settings") 
    settings["routes"] = routesSetting as String 
    settings["sortBy"] = sortBySetting as String 
    settings["user"] = PFUser.currentUser() 
    settings.saveInBackgroundWithBlock{(success:Bool!, error:NSError!) ->Void in 
     if success != nil { 
      NSLog("%@","OK-settings data saved") 
      NSLog("%@",self.routesSetting as String) 
     } 
     else 
     { 
      NSLog("%@",error) 
     } 
    } 
} 

@IBAction func updateSettings(sender: AnyObject) { 

    var settings:PFObject = PFObject(className:"Settings") 
    var id = settings["objectId"] as String 
    var query = PFQuery(className:"Settings") 

    println(settings) 
    println(id) 
    println(query) 

    query.getObjectInBackgroundWithId(id) { 
     (settings: PFObject!, error: NSError!) -> Void in 
     if error != nil { 
      NSLog("%@", error) 
     } else { 
      settings["routes"] = self.routesSetting as String 
      settings["sortBy"] = self.sortBySetting as String 
      settings.save() 
     } 
    } 

Я могу запустить код saveSettings без каких-либо проблем. Я установил его для запуска, когда новый пользователь подписывается с приложением. Я проверил, что новая строка вставляется в таблицу параметров в облачной базе данных Parse. Но теперь я хотел бы просто ОБНОВИТЬ одну строку вместо создания новой строки каждый раз, когда есть сохранение. Поэтому я работал над функцией updateSettings. Я следил за документацией Parse для обновления объектов (https://parse.com/docs/ios_guide#objects-updating/iOS). При нажатии на кнопку Update, чтобы запустить функцию, я получаю:

фатальная ошибка: неожиданно нашли ноль в то время как разворачивание необязательное значение (lldb)

Линия она указывает на это:

var id = settings["objectId"] as String 

Я полный новичок в парсе.

Некоторые недавние дополнительная информация:

Результаты Println заявления:

<Settings: 0x7fd423805260, 
objectId: new, localId: (null)> { 
} 
nil 
<PFQuery: 0x7fd4217191f0> 

Так часть проблемы это не извлекая ObjectId?

+0

Если 'настройки [«ObjectId»]' равна нулю, вы не можете бросить он набирает String. Вы могли бы наложить его на тип 'String? ', Написав' var id = settings ["objectId"] как? String'. При работе с библиотеками Objective-C в Swift вы часто получаете значения nil, поэтому вы должны хранить их в переменных с нулевым значением. – Phssthpok

+0

Я попробую. Но я вижу строку в таблице с objectId - почему она будет равна нулю? – lostinthebits

+0

Это по-прежнему приводит к ошибке со смертельным исходом. Может быть, мой запрос неверен? Я следую учебнику. – lostinthebits

ответ

2

PFObject имеет свойство под названием «ObjectId», он не хранится в словаре, так что вы можете вернуть его в

var id = settings.objectId 
+0

Спасибо - я попробую это, когда я вернусь домой сегодня вечером - к сожалению, нет компьютеров Mac в офисе. – lostinthebits

+0

@ lostinthebits ok, я надеюсь, что это решит вашу проблему. –

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