2015-10-18 69 views
0

下面是我的函數,其中突出顯示了可以工作的代碼(即異步),但我想要的是與PFQuery.countObjects(error: NSErrorPointer)一起工作的同步代碼。語法使用來自解析的countObjects(同步)的問題

//Count how many violations User has. 
func checkViolationStatus(usr: PFUser) -> Int32 { 
    var violations: Int32 = 0 
    var query = PFQuery(className: PF_BLOCKEDUSERS_CLASS_NAME) 
    query.includeKey(PF_BLOCKEDUSERS_USER) 
    query.whereKey(PF_BLOCKEDUSERS_USER, equalTo: usr) 

    //THIS WORKS BUT IS ASYNCHRONOUS AND I WANT IT TO BE SYNCHRONOUS 
    //  query.countObjectsInBackgroundWithBlock { 
    //   (count: Int32, error: NSError?) -> Void in 
    //   if error == nil { 
    //    print("Sean has played \(count) games") 
    //    violations = count 
    //   } 
    //  } 

    //WANT TO MAKE IT SYNCHRONOUS -- THIS DOES NOT WORK 
    violations = query.countObjects(<#T##error: NSErrorPointer##NSErrorPointer#>) 

    return violations 

} 

如何正確使用query.countObjects(...)

+0

你想讓它同步的設計理由是什麼?如果有很多對象,並且它連接主線程,那麼它顯然會導致性能不佳。 – pbush25

+0

這是一個屏幕,這是要顯示的關鍵信息。我猜想我能得到的其中一個錯誤是超時。另外一般來說,我在如何從Parse進行同步讀取時遇到問題,所以想更好地理解正確的語法。 – user1406716

+0

@ user1406716您收到的錯誤是什麼? – Daniel

回答

1

這裏是在countObjects與代碼一起傳遞一個NSError打印錯誤的語法,你應該得到一個:

var error: NSError? 
violations = query.countObjects(&error) 

if error != nil { 
    print(error?.localizedDescription) 
} 

這裏是一個小的解釋,以幫助您進一步瞭解該錯誤類型。

NSErrorPointer類型基本相同,在Objective-C NSError**並指出了一個對象,它實際上是生活,而不僅僅是對象的指針的地址,需要履行的參數類型。這是Objective-C中常見的錯誤處理模式。

&運算符允許您將這樣的地址傳遞給函數。傳入的參數可以被修改而不是僅限於函數的範圍。這被稱爲Swift術語中的輸入參數,因爲進入的內容也會消失。

1

你應該從來沒有網絡synchrously。它凍結了界面,WatchDog進程會在用戶非常睜大眼睛之前殺死你的應用程序,如果這種情況持續太久的話。

如果您將瞭解異步代碼的工作原理並保持異步,那將會更好。您不能以您正在執行的方式從啓動異步代碼的代碼中返回值;您的checkViolationStatus會在異步代碼有機會將violations設置爲任何內容之前返回。取而代之的是,checkViolationStatus需要PFUser 和調用者傳遞給您的完成處理程序。在異步塊內部,調用完成處理程序,交給它count

+0

你是對的,做了一些研究,可以在這裏使用完成處理程序。我會努力的。抱歉不能標記爲答案,但沒有+1。 – user1406716

+0

謝謝。你對正確的答案是正確的,它正在解釋錯誤指針語法。 – matt

+0

我曾試圖完成處理程序,但結果並不如預期。在異步調用完成後,不應該觸發調用函數的結果嗎?我打開了一個新問題:http://stackoverflow.com/questions/33205527/completion-handler-not-working-as-expected-in-swift – user1406716