2014-02-28 48 views
0

我使用btstack在iPhone和外部設備之間進行通信。我想發送一個特殊命令來檢索設備的特殊數據。但我只能從btstack的handlePacket:方法獲取數據。我只能使用委託處理數據。 但我想打一個方法是這樣的:如何使異步方法處理來自委託的數據?

- (void)readDataAsyncWithCompletionHandler:(Handler)handler 

處理程序塊應該獲取數據。 我不知道該怎麼辦。 我做了一個Command類來完成命令的構建和發送。

我知道我們可以在c#中使用await!那麼如何在ios中處理它呢?

+0

您應該添加,您目前如何使用委託方法。重要細節被省略時,提出可行的解決方案是不可能的。 – CouchDeveloper

回答

2

你應該這樣寫。

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 

    //do you time consuming task 


    dispatch_sync(dispatch_get_main_queue(), ^{ 
     //if you are doing any interaction with UI, do it here 

    }); 

}); 
0

最好的做法是在這種情況下使用Grand Central Dispatch。 Here是一個適合初學者的教程,this是GCD的官方Apple文檔。

0

您可以使用

[self performSelectorInBackground:@selector(theMethod) withObject:nil]; 

或創建一個NSInvocationOperation對象。

NSInvocationOperation operation = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(theMethod) object:nil]; 

並將其添加到NSOperationQueue。

NSOperationQueue *queue = [[NSOperationQueue alloc]init]; 
    [queue addOperation:operation]; 

或者創建上面給出的dispatch_async塊。