RestKit:为postObject调用什么委托方法?

- (RKObjectLoader *)postObject:(id<NSObject>)object delegate:(id<RKObjectLoaderDelegate>)delegate被调用后调用- (RKObjectLoader *)postObject:(id<NSObject>)object delegate:(id<RKObjectLoaderDelegate>)delegate什么方法?

我试图运行一些我的POST成功的代码。

编辑(更多信息):

@Paul提到的这两种方法都没有被调用,但是我的服务器正在正确地解释POST,因为DB正在被写入。

在应用程序初始化期间,我正在做以下事情:

 // Grab the reference to the router from the manager RKObjectRouter *router = [RKObjectManager sharedManager].router; // Define a default resource path for all unspecified HTTP verbs [router routeClass:[EventMessage class] toResourcePath:@"/events_messages/:idPrimaryKey"]; [router routeClass:[EventMessage class] toResourcePath:@"/event_messages" forMethod:RKRequestMethodPOST]; 

当我准备发布时,我正在这样做:

 RKObjectMapping *objectMapping = [RKObjectMapping mappingForClass:[EventMessage class]]; [objectMapping mapKeyPath:@"user_id" toAttribute:@"userId"]; [objectMapping mapKeyPath:@"event_id" toAttribute:@"eventId"]; [objectMapping mapKeyPath:@"message" toAttribute:@"message"]; [[RKObjectManager sharedManager].mappingProvider registerMapping:objectMapping withRootKeyPath:@"event_message"]; [[RKObjectManager sharedManager] postObject:eventMessage delegate:self]; 

这是我在控制台中得到的错误:

错误域= JKErrorDomain代码= -1“意想不到的标记,想'',''','',':','真','假','空',' “STRING”,“NUMBER”。“ UserInfo = 0x7b9f510 {JKAtIndexKey = 0,JKLineNumberKey = 1,NSLocalizedDescription =意想不到的标记,想要'{','}','[',']',',',':','true','false', 'null',''STRING'','NUMBER'。}

  - (void)objectLoader:(RKObjectLoader*)objectLoader didLoadObjects:(NSArray*)objects; 

要么

  - (void)objectLoader:(RKObjectLoader*)objectLoader didFailWithError:(NSError*)error; 

一旦你正确地设置你的映射,对象的发布是非常容易的。 就像Paul Cezanne指出的那样,相应的callback将被使用。

但是,对于发布对象,您还需要一个序列化映射,告诉框架哪些参数应该转换为POST参数:

映射示例:

  // Serialisation Mapping RKObjectMapping *messageSendMapping = [RKObjectMapping mappingForClass:[NSMutableDictionary class]]; [messageSendMapping mapAttributes:@"name", @"number", @"text", nil]; [[RKObjectManager sharedManager].mappingProvider setSerializationMapping:messageSendMapping forClass:[Message class]]; 

更新:出于故障排除的目的,您可能希望像这样增加RestKit的日志级别:

 RKLogConfigureByName("RestKit", RKLogLevelTrace); RKLogConfigureByName("RestKit/Network", RKLogLevelTrace); RKLogConfigureByName("RestKit/ObjectMapping", RKLogLevelTrace); RKLogConfigureByName("RestKit/CoreData", RKLogLevelTrace); 

确保RKObjectManager已被初始化:

 NSString *url = @"http://example.com"; RKObjectManager* mgr = [RKObjectManager managerWithBaseURLString:url]; 

我浪费了一大堆时间才注意到sharedManager并不是一个单身人士,你必须初始化它。

之后,您可以使用sharedManager并获得第一个创build的引用:

 [[RKObjectManager sharedManager].mappingProvider setObjectMapping:mapping forResourcePathPattern:@"/RKKeyValueMappingExample"];