2015-10-18 70 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