2013-03-18 65 views
0

我是restkit和iOS的新手。我使用xcode 4.2和RestKit 0.2。我一直在开发一个iPhone应用程序,与我创建的一些REST Web服务进行通信,现在我面临一个问题。 我的一些网络服务打算多次打电话。第一个请求没有问题,运行,但是当我尝试再次拨打电话,我得到这个错误:Restkit + Objective-c - 对同一个Web服务的多个调用

'NSInternalInconsistencyException', reason: 'Cannot add a request descriptor for the same object class as an existing request descriptor.'

我明白这个错误是什么意思但还没有找到一种方法来实现通话,可以被重用。我有一种感觉,我做错了。下面是我使用来调用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服务,并在发布的对象中使用不同的信息。

感谢所有提前。

问候

回答

0

一切都在这个程序中,除了“postObject”呼大概应该是其他地方,例如在您的应用程序,委托时,应用程序启动。

您正在设置映射,关系和请求描述符。您无需为每次通话都指定它们。只需将它们设置一次,然后在准备就绪时调用“postObject”。对于你的serializationType也是如此 - 除非一些REST端点返回XML,而另一些端点返回JSON,否则你可以设置一次,并忘记它。

+0

嗯,我觉得有点笨,没有想到这个我的自我...它运作良好。非常感谢你 – user2119777 2013-03-19 15:35:08

相关问题