gpt4 book ai didi

restkit-0.20 - RESTKit 0.20 操作队列

转载 作者:行者123 更新时间:2023-12-02 08:34:36 26 4
gpt4 key购买 nike

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

任何人都可以发布带有以下内容的代码/示例:

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

期待听到您的声音。

谢谢。

最佳答案

在这里,我将与您分享我用于 ManagedObjects(CoreData 对象)请求操作的一段代码。

获取对 objectManager 和 managedObjectContext 的引用;

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

初始化数组以在其中保存操作

NSMutableArray *requestOperations = [NSMutableArray array];

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

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

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

关于restkit-0.20 - RESTKit 0.20 操作队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23148594/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com