2016-11-07 8 views
0

FIFOを使用して、push notificationアクションを同期して処理したいと考えています。インサイド:プッシュ通知アクションのアクションを同期して処理する

(void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo completionHandler:(void (^)())completionHandler 

は、私は多くのブロックを持っていると私は私がアクションを受信したときに、私はFIFOに(そのブロックで)それを追加することをしたいと思います。

答えて

0
NSOperationQueue* queue = [[ NSOperationQueue alloc ] init]; 
queue.maxConcurrentOperationCount = 1; 

NSOperation* someOperation = [NSBlockOperation blockOperationWithBlock:^(void) { NSLog(@"Done.");}]; 

if (queue.operations.count != 0) 
    [someOperation addDependency: queue.operations.lastObject]; 

あなたは、単にあなたのNSOperationQueueにカテゴリを追加することができます。

@interface NSOperationQueue (FIFOQueue) 
    - (void)addOperationAfterLast:(NSOperation *)op; 
@end 

@implementation NSOperationQueue (FIFOQueue) 
- (void)addOperationAfterLast:(NSOperation *)op 
    { 
    if (self.maxConcurrentOperationCount != 1) 
     self.maxConcurrentOperationCount = 1; 
     NSOperation* lastOp = self.operations.lastObject; 
    if (lastOp != nil) 
     [op addDependency: lastOp]; 
     [self addOperation:op]; 
    } 
@end 

をし、[キューaddOperationAfterLast:myOperation]を使用します。

+0

感謝を使用してみてください、私はcompletionHandlerを呼び出す必要があり;.私はあなたの方法を使ってこれを行う方法がありません –

0

)(このアプローチに答えFOT

dispatch_queue_t myQueue = dispatch_queue_create("com.mycompany.myqueue", 0); 
dispatch_async(myQueue, ^{ 
    printf("1"); 
}); 
dispatch_async(myQueue, ^{ 
    printf("2"); 
}); 
dispatch_async(myQueue, ^{ 
    printf("3"); 
}); 
dispatch_async(myQueue, ^{ 
    printf("4"); 
}); 
dispatch_async(myQueue, ^{ 
    printf("5"); 
}); 
// wait for queue to empty 
dispatch_sync(myQueue, ^{ 
    printf("done"); 
}); 
関連する問題