2014-11-14 4 views
3

Я хотел бы задать строковое значение идентификатору объекта при создании объекта ниже. На данный момент он печатает «ноль». Есть идеи? БлагодаряПолучить идентификатор объекта при создании объекта (Parse.com)

var date:NSDate = currentDatePicker.date 
    var DOB:NSDate = DOBPicker.date 

    var user = PFUser.currentUser() 

    var report = PFObject(className:"reports") 
    report["name"] = nameTextField.text 
    report["DOB"] = DOB 
    report["date"] = date 
    report["user"] = user 
    report.saveInBackground() 

    var ojId = report.objectId 
    println(ojId) 

ответ

10

saveInBackground асинхронный метод, поэтому он не ждет. Причина, по которой идентификатор не установлен, заключается в том, что объект еще не сохранен.

Я думаю, вы должны использовать saveInBackgroundWithBlock: и получить форму идентификатор объекта в блоке (который выполняется после того, как объект был сохранен):

var report = PFObject(className:"reports") 
report["name"] = nameTextField.text 
report["DOB"] = DOB 
report["date"] = date 
report["user"] = user 
report.saveInBackgroundWithBlock { (success, error) -> Void in 
    if success { 
     var ojId = report.objectId 
     println(ojId) 
    } 
} 

или, может быть также save, которая выполняется синхронно - но не использовать это из основной резьбы:

report.save() 
var ojId = report.objectId 
println(ojId) 
+0

Я немного смущен. Должен ли я 'SaveInBackgroundWithBlock', а также код, который я использую в настоящее время? –

+0

Нет, вам следует сэкономить один раз. См. Обновленный ответ – Antonio

+0

@TomCoomer спасибо за исправление кода :) – Antonio