【问题标题】:Handle actions from Push notification actions synchronously同步处理来自推送通知操作的操作
【发布时间】:2016-11-07 12:37:31
【问题描述】:

我想使用FIFO 同步处理push notification 操作。内部:

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

我有很多块,我希望当我收到一个动作时,我将它(连同它的块)添加到 FIFO

【问题讨论】:

    标签: ios objective-c push-notification push


    【解决方案1】:
    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
    

    并使用 [queue addOperationAfterLast:myOperation]。

    【讨论】:

    • 感谢您的回答,但我必须调用completionHandler();。我不知道你如何使用你的方法来做到这一点
    【解决方案2】:

    尝试使用这种方法

    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");
    });
    

    【讨论】:

      猜你喜欢
      • 2017-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-16
      相关资源
      最近更新 更多