2014-11-14 125 views
3

我想在下面创建对象时将字符串值设置为对象ID。目前它打印“无”。有任何想法吗?谢谢创建对象时获取对象ID(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是一个异步方法,所以它不会等待。 ID未设置的原因是因为实体尚未保存。

我认为你应该使用saveInBackgroundWithBlock:和块内检索对象ID形式(其中执行实体已保存后):

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'以及我目前使用的代码吗? – 2014-11-14 13:46:25

+0

不,你应该保存一次。查看更新回答 – Antonio 2014-11-14 13:52:32

+0

@TomCoomer感谢您的代码修复:) – Antonio 2014-11-14 14:04:41