iOS   发布时间:2022-03-30  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了iphone – 使用RestKit进行发布导致nil对象被发布大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我在使用RestKit 0.20pre6发布NsmanagedObject时遇到问题,导致在我的Rails站点使用Nil值创建一个条目.我怀疑是mapper,但我已经正确地设置了我的RK对象.很少有例子和有限的支持.该示例处理NSObjects而非CoreData,因此我不得不做出一些假设.

这是我的发布代码,然后是控制台输出.该应用程序从服务器获取对象很好.

// Sync the added object to the server
    // ****************************************

    RKObjecMapping *responseMapping = [RKObjectMapping mappingForClass:[Event class]];
//  RKEntitymapping *responseMapping = [RKEntitymapping mappingForEntityForName:@"Event" inManagedObjectStore:self.managedObjectStore];
    [responseMapping addAttributeMappingsFromDictionary:@{
     @"id": @"eventId",@"name": @"name",@"amount": @"amount",@"length": @"length",@"updated_at": @"updatedAt",@"created_at": @"createdAt",@"latitude": @"latitude",@"longitude": @"longitude",@"thumbnail": @"thumbnail",@"airTemp": @"airTemp",}];

    NSIndexSet *statusCodes = RKStatusCodeIndexSetForClass(RKStatusCodeClasssuccessful); // Anything in 2xx
    RKResponseDescriptor *eventDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:responseMapping
                                                                                    pathPattern:@"/events"
                                                                                        keyPath:@"events"
                                                                                    statusCodes:statusCodes
                                                                                                ];

    RKObjectMapping *requestMapping = [RKObjectMapping requestMapping]; // objectClass == NSMutableDictionary

    [requestMapping addAttributeMappingsFromDictionary:@{
     @"id": @"eventId",}];


    // For any object of class Article,serializE into an NSMutableDictionary using the given mapping and nest
    // under the 'article' key path
    RKrequestDescriptor *requestDescriptor = [RKrequestDescriptor requestDescriptorWithMapping:requestMapping
                                                                                   objectClass:[Event class]
                                                                                   rootKeyPath:@"events"
                                                                                                ];

    LOCATIOnsAppDelegate *appDelegate = (LOCATIOnsAppDelegate *)[[UIApplication sharedApplication] delegate];
//  RKObjectManager *manager = [RKObjectManager managerWithBaseURL:gBaseURL];


    [RKObjectManager sharedManager].requestserializationMIMEType = RKMIMETypeJSON;
    [[RKObjectManager sharedManager] addrequestDescriptor:requestDescriptor];
    [[RKObjectManager sharedManager] addResponseDescriptor:eventDescriptor];

    NSLog(@"RVC-addEvent %@ - %@",appDelegate.user.login,appDelegate.user.password);
    [[NBEventManager sharedManager] setUsername:appDelegate.user.login andpassword:appDelegate.user.password];
    appDelegate.objectManager.httpClient = [NBEventManager sharedManager];


    event = [eventsArray objectATindex:0];
    [[RKObjectManager sharedManager] postObject:event
                                           path:@"/events"
                                     parameters:nil
                                        success:nil
                                        failure:nil
                                                ];

}

这是我的代码,因为我已将所有映射移动到应用程序委托并实现了RKEntitymapping.我仍然没有附加到POST调用的JSON对象.

RKEntitymapping *eventMapping = [RKEntitymapping mappingForEntityForName:@"Event" inManagedObjectStore:managedObjectStore];
[eventMapping addAttributeMappingsFromDictionary:@{
 @"id": @"eventId",}];
eventMapping.identificationAttributes = @[ @"eventId" ];

//RKRelationshipMapping *eventRelationship = [RKRelationshipMapping relationshipMappingFromKeyPath:@"events"
//                                                                                     toKeyPath:@"events"
//                                                                                   withMapping:eventMapping];
//[eventMapping addPropertymapping:eventRelationship];

// Register our mappings with the provider
RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:eventMapping
                                                                                   pathPattern:nil
                                                                                       keyPath:@"event"
                                                                                   statusCodes:rKStatusCodeIndexSetForClass(RKStatusCodeClasssuccessful)];
[objectManager addResponseDescriptor:responseDescriptor];

RKEntitymapping *eventrequestMapping = [eventMapping inverseMapping];
RKrequestDescriptor *eventrequestDescriptor = [RKrequestDescriptor requestDescriptorWithMapping:eventrequestMapping
                                                                                    objectClass:[Event class]
                                                                                    rootKeyPath:@"event"
                                                                                                ];
[objectManager addrequestDescriptor:eventrequestDescriptor];
[RKObjectManager sharedManager].requestserializationMIMEType = RKMIMETypeJSON;

解决方法

RESTKit 0.20pre6中存在一个错误,它将http Body打印到NSLog,POST请求为(null),即使它是一个对象.我在开发分支中修复了它.
https://github.com/RestKit/RestKit/pull/1139

大佬总结

以上是大佬教程为你收集整理的iphone – 使用RestKit进行发布导致nil对象被发布全部内容,希望文章能够帮你解决iphone – 使用RestKit进行发布导致nil对象被发布所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。