【问题标题】:RESTKit 0.20 Operations queueRESTKit 0.20 操作队列
【发布时间】:2014-04-18 06:23:17
【问题描述】:

我正在尝试实现 RESTKit 0.20 操作队列,我在博客上读到 NSOperationQueue 也可用于创建操作队列。我想使用 RestKit 操作队列的本机方法。

任何人都可以发布以下代码/示例:

  • 如何在 RestKit 中使用操作队列。
  • 将队列设置为一次执行一项操作。
  • 如果第一个操作未完成,那么我需要取消此队列中的待处理操作。

期待听到你的声音。

谢谢。

【问题讨论】:

    标签: restkit-0.20


    【解决方案1】:

    我在这里分享一段我用于 ManagedObjects(CoreData Objects) 请求操作的代码。

    获取对 objectManager 和 managedObjectContext 的引用;

    RKObjectManager *objectManager = [(AppDelegate *)[[UIApplication sharedApplication] delegate] objectManager];
    NSManagedObjectContext *managedObjectContext = [(AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];
    

    初始化数组以阻止其中的操作

    NSMutableArray *requestOperations = [NSMutableArray array];
    

    准备第一个操作并将其添加到 requestOperations 数组中,通知失败块正在取消队列中的待处理操作。

    // Setup Organization Operation
    //
    NSString *url = @"organizations/syncAll/";
    NSMutableURLRequest *organizationsRequest = [objectManager requestWithObject:organizations method:RKRequestMethodPOST path:url parameters:nil];
    
    RKObjectRequestOperation *organizationsOperation = [objectManager managedObjectRequestOperationWithRequest:organizationsRequest managedObjectContext:managedObjectContext success: ^(RKObjectRequestOperation *operation, RKMappingResult *result) {
    
        ..
    
        [RKUtils isHandleStatusError:[result array]];
    } failure: ^(RKObjectRequestOperation *operation, NSError *error) {
        NSLog(@"Failed with error: %@", [error localizedDescription]);
    
        [objectManager cancelAllObjectRequestOperationsWithMethod:RKRequestMethodPOST matchingPathPattern:@"games/getNotStartedGames"];
        [RKUtils handleError:error];
    }];
    [requestOperations addObject:organizationsOperation];
    

    准备第二次手术

    // Setup Games Operation
    //
    url = @"games/syncAll/";
    NSMutableURLRequest *gamesRequest = [objectManager requestWithObject:games method:RKRequestMethodPOST path:url parameters:nil];
    
    RKObjectRequestOperation *gamesOperation = [objectManager managedObjectRequestOperationWithRequest:gamesRequest managedObjectContext:managedObjectContext success: ^(RKObjectRequestOperation *operation, RKMappingResult *result) {
    
        ..
    
        [RKUtils isHandleStatusError:[result array]];
    } failure: ^(RKObjectRequestOperation *operation, NSError *error) {
        NSLog(@"Failed with error: %@", [error localizedDescription]);
    
        if (error.code == NSURLErrorCancelled) {
            return;
        }
    
        [RKUtils handleError:error];
    }];
    [requestOperations addObject:gamesOperation];
    

    准备更多操作

    ..
    

    将最大并发操作数设置为 1

    objectManager.operationQueue.maxConcurrentOperationCount = 1;
    

    将队列中的所有操作排入队列。队列将开始一一执行操作。

    // Enqueue Request Operations
    [objectManager enqueueBatchOfObjectRequestOperations:requestOperations progress: ^(NSUInteger numberOfFinishedOperations, NSUInteger totalNumberOfOperations) {
        NSLog(@"totalNumberOfOperations : %d", totalNumberOfOperations);
        NSLog(@"numberOfFinishedOperations : %d", numberOfFinishedOperations);
    } completion: ^(NSArray *operations) {
        NSLog(@"completion");
    }];
    

    希望这能实现您的目标。 干杯,

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多