【发布时间】:2014-04-18 06:23:17
【问题描述】:
我正在尝试实现 RESTKit 0.20 操作队列,我在博客上读到 NSOperationQueue 也可用于创建操作队列。我想使用 RestKit 操作队列的本机方法。
任何人都可以发布以下代码/示例:
- 如何在 RestKit 中使用操作队列。
- 将队列设置为一次执行一项操作。
- 如果第一个操作未完成,那么我需要取消此队列中的待处理操作。
期待听到你的声音。
谢谢。
【问题讨论】:
标签: restkit-0.20
我正在尝试实现 RESTKit 0.20 操作队列,我在博客上读到 NSOperationQueue 也可用于创建操作队列。我想使用 RestKit 操作队列的本机方法。
任何人都可以发布以下代码/示例:
期待听到你的声音。
谢谢。
【问题讨论】:
标签: restkit-0.20
我在这里分享一段我用于 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");
}];
希望这能实现您的目标。 干杯,
【讨论】: