2

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

一旦我的 POST 成功,我将尝试运行更多代码。

编辑(更多信息):

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

在应用程序初始化期间,我正在执行以下操作:

// 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 "意外的令牌,想要 '{', '}', '[', ']', ',', ':', 'true', 'false', 'null', ' “字符串”,“数字”。UserInfo=0x7b9f510 {JKAtIndexKey=0, JKLineNumberKey=1, NSLocalizedDescription=Unexpected token, 想要 '{', '}', '[', ']', ',', ':', 'true', 'false', 'null'、'"STRING"'、'NUMBER'.}

4

3 回答 3

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

或者

    - (void)objectLoader:(RKObjectLoader*)objectLoader didFailWithError:(NSError*)error;
于 2012-04-25T09:02:42.763 回答
2

一旦您正确设置了映射,对象的发布就非常容易。就像 Paul Cezanne 指出的那样,将使用相应的回调。

但是,对于发布对象,您还需要一个序列化映射来告诉框架哪些参数应该转换为 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);
于 2012-04-25T09:07:57.697 回答
0

确保 RKObjectManager 已经初始化:

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

我浪费了很多时间才注意到 sharedManager 并不是真正的单例,你必须初始化它。

之后,您可以使用 sharedManager 并获取对创建的第一个的引用:

[[RKObjectManager sharedManager].mappingProvider setObjectMapping:mapping forResourcePathPattern:@"/RKKeyValueMappingExample"];
于 2012-06-28T04:09:56.947 回答