Restkit + Objective-c - 多次调用同一个 Web 服务

Posted

技术标签:

【中文标题】Restkit + Objective-c - 多次调用同一个 Web 服务【英文标题】:Restkit + Objective-c - Multiple calls to same web service 【发布时间】:2013-03-18 13:41:44 【问题描述】:

我是 restkit 和 ios 的新手。我正在使用 xcode 4.2 和 RestKit 0.2。我一直在开发一个 iPhone 应用程序,它与我创建的一些 REST Web 服务进行通信,现在我遇到了一个问题。 我的一些网络服务被多次调用。第一个请求运行没有问题,但是当我再次尝试拨打电话时,我收到此错误:

'NSInternalInconsistencyException',原因:'无法为与现有请求描述符相同的对象类添加请求描述符。'

我确实理解此错误的含义,但尚未找到实现可重用调用的方法。我有一种感觉,我做错了。以下是我用来调用 Web 服务的函数之一:

- (void) restAddPlayer:(addPlayer*)add block:(void (^)(id))block
// Load the object model via RestKit
RKObjectManager *objectManager = [RKObjectManager sharedManager];
RKObjectMapping *categoryRequestMapping = [RKObjectMapping requestMapping];
[categoryRequestMapping addAttributeMappingsFromDictionary:@@"gName": @"groupName",@"pass":@"pass"];

RKObjectMapping *reqMapping = [RKObjectMapping requestMapping];
[reqMapping addAttributeMappingsFromDictionary:@@"plName": @"playerName"];
[reqMapping addRelationshipMappingWithSourceKeyPath:@"groupInfo" mapping:categoryRequestMapping];
RKRequestDescriptor *requestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:reqMapping objectClass:[addPlayer class] rootKeyPath:nil];

[objectManager addRequestDescriptor:requestDescriptor];
objectManager.requestSerializationMIMEType = RKMIMETypeJSON;

[objectManager postObject:add path:@"addPlayer"parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) 

                      NSArray* statuses = [mappingResult array];
                     //NSLog(@"Loaded statuses: %@", statuses);
                     // _result = [statuses objectAtIndex:0];
                      block(statuses);

                  
                 failure:^(RKObjectRequestOperation *operation, NSError *error)
                     NSLog(@"Hit error: %@", error);
                     block(nil);
                 
    ];

我知道我正在添加一个请求描述符,当我再次调用该函数时,它试图添加另一个,因此出现错误。我想知道的是如何处理这个问题,以便我可以多次调用 Web 服务,并在发布的对象中使用不同的信息。

在此先感谢大家。

问候

【问题讨论】:

【参考方案1】:

这个例程中的所有内容,除了“postObject”调用应该在其他地方,比如在应用启动时在你的应用委托中。

您正在设置映射、关系和请求描述符。您无需为每次调用都指定它们。只需设置一次,然后当您准备好时,只需调用“postObject”即可。您的 serializationType 可能也是如此 - 除非某些 REST 端点返回 XML 而其他端点返回 JSON,否则您可能可以设置一次,然后忘记它。

【讨论】:

嗯,我觉得有点愚蠢,不考虑我自己......它运作良好。非常感谢

以上是关于Restkit + Objective-c - 多次调用同一个 Web 服务的主要内容,如果未能解决你的问题,请参考以下文章

Objective-C RestKit 没有输出

RestKit 和拉动刷新

RestKit 在 RKEntityMapping 行崩溃

使用自省restkit的对象映射

将restkit安装到xcode中-总是这么复杂吗?

如何过早取消 RestKit 中的请求并调用“didFailWithError”