应用程序在调度时崩溃\u async,Swift

应用程序在调度时崩溃\u async,Swift,swift,Swift,我有以下代码片段,其中有时这一行:self.onPostExecute(transItem)导致应用程序崩溃: func execute(){ dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), { //Your code to execute in background... println("Your code to e

我有以下代码片段,其中有时这一行:
self.onPostExecute(transItem)
导致应用程序崩溃:

func execute(){

        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {
            //Your code to execute in background...

             println("Your code to execute in background...")
            var  transItem:WmTransferItem = self.doInBackground()

            dispatch_async(dispatch_get_main_queue(), {
                 println("code to be executed on the main thread when background task is finished")
                self.onPostExecute(transItem) // line 639
                });
            });            
    }
这是什么意思:
带有不混合后缀“\u promote0”

例外情况:

Thread : Crashed: com.apple.main-thread
0  MyApplication                       0x000e9ed8 MyApplication.WmBuildGroupsTask.onPostExecute (MyApplication.WmBuildGroupsTask)(MyApplication.WmTransferItem) -> () (WmBuildGroupsTask.swift:419)
1  libswiftCore.dylib             0x0045803b swift_reportFatalError + 162
2  MyApplication                       0x000f2ddc MyApplication.WmBuildGroupsTask.(execute (MyApplication.WmBuildGroupsTask) -> () -> ()).(closure #1).(closure #1) with unmangled suffix "_promote0" (WmBuildGroupsTask.swift:639)
3  MyApplication                       0x000f2e34 reabstraction thunk helper from @callee_owned () -> (@unowned ()) to @callee_unowned @objc_block () -> (@unowned ()) (WmBuildGroupsTask.swift)
4  libdispatch.dylib              0x3a133d53 _dispatch_call_block_and_release + 10
5  libdispatch.dylib              0x3a133d3f _dispatch_client_callout + 22
6  libdispatch.dylib              0x3a1366c3 _dispatch_main_queue_callback_4CF + 278
7  CoreFoundation                 0x2f47a641 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 8
8  CoreFoundation                 0x2f478f0d __CFRunLoopRun + 1308
9  CoreFoundation                 0x2f3e3729 CFRunLoopRunSpecific + 524
10 CoreFoundation                 0x2f3e350b CFRunLoopRunInMode + 106
11 GraphicsServices               0x343526d3 GSEventRunModal + 138
12 UIKit                          0x31d44871 UIApplicationMain + 1136
13 MyApplication                       0x00166417 main (main.m:32)
我做错了什么


谢谢,

我不能接受这个答案作为书面答案,但现在这个例子工作正常,我没有在崩溃报告中提到上述崩溃

我们开始:

我使用基于捆绑包名称的自定义队列,而不是
dispatch\u get\u global\u queue

let queue = dispatch_queue_create("<BUNDLE_NAME>", nil)
let queue=dispatch\u queue\u create(“,nil)

范例

func执行(){
let queue=dispatch\u queue\u create(“,nil)
调度异步(队列{
//要在后台执行的代码。。。
println(“要在后台执行的代码…”)
var transItem:WmTransferItem=self.doInBackground()
dispatch\u async(dispatch\u get\u main\u queue(){
println(“后台任务完成时在主线程上执行的代码”)
self.onPostExecute(transItem)
});
});
}

希望能对某人有所帮助。

你有没有弄清楚这里的问题是什么?@AndyTsen,我不知道。这种情况并不总是发生,我也有同样的问题。但它只是为我的发布配置而复制的。本主题帮助我了解Matt Gibson的评论,如果您关闭发布版本的Swift编译器优化,请再试一次,您仍然会遇到崩溃吗?(在构建设置中,在Swift编译器/代码生成下)-马特·吉布森9月2日19:13通过将nil传递到dispatch\u queue\u create,您正在创建一个串行队列;在原始代码中,从
dispatch\u get\u global\u queue
获得的队列是一个并发队列。那可能和你的锯子的碰撞有关。
func execute(){

    let queue = dispatch_queue_create("<BUNDLE_NAME>", nil)

    dispatch_async(queue, {
        //Your code to execute in background...

         println("Your code to execute in background...")
        var  transItem:WmTransferItem = self.doInBackground()

        dispatch_async(dispatch_get_main_queue(), {
             println("code to be executed on the main thread when background task is finished")
            self.onPostExecute(transItem)
            });
        });

}