Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 在RestKit 0.20.3中执行objectPost时出现错误204_Iphone_Ios_Restkit 0.20 - Fatal编程技术网

Iphone 在RestKit 0.20.3中执行objectPost时出现错误204

Iphone 在RestKit 0.20.3中执行objectPost时出现错误204,iphone,ios,restkit-0.20,Iphone,Ios,Restkit 0.20,请帮忙。我对RestKit非常陌生,几天来一直在努力使用RestKit.20.3成功执行一篇相当直截了当的文章。我遵循了所有不同的示例和说明,并使用了Alexander Edge教程的一部分以及RestKit GitHub示例和文档,但均无效。有没有人能快速浏览一下我的代码,并告诉我如何使用RestKit.20.3成功完成一篇文章?我怀疑我的最后一行代码是错误的,因为我的postObject是“nil”,但我只是不确定。如有任何提示或建议,将不胜感激 顺便说一句:我在调试日志中收到的错误是“预期

请帮忙。我对RestKit非常陌生,几天来一直在努力使用RestKit.20.3成功执行一篇相当直截了当的文章。我遵循了所有不同的示例和说明,并使用了Alexander Edge教程的一部分以及RestKit GitHub示例和文档,但均无效。有没有人能快速浏览一下我的代码,并告诉我如何使用RestKit.20.3成功完成一篇文章?我怀疑我的最后一行代码是错误的,因为我的postObject是“nil”,但我只是不确定。如有任何提示或建议,将不胜感激

顺便说一句:我在调试日志中收到的错误是“预期状态代码为(400-499),得到204”

}

这是我的更新代码。我做了所有建议的mod,现在我得到了以下错误:get 500“UserInfo=0x95c7bd0{nsLocalizedRecoverysSuggestion=error 500:javax.servlet.ServletException:org.codehaus.jackson.map.JsonMappingException:找不到非具体映射类型的反序列化程序[map type;class javax.ws.rs.core.MultivaluedMap,[简单类型,类java.lang.String]->[简单类型,类java.lang.String]] 有什么解决办法吗

- (void)setupRestKitTutorial{
NSLog(@"setupRestKitTutorial - Start");

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

RKObjectManager *manager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:getDataURL]];
[manager setRequestSerializationMIMEType:RKMIMETypeJSON];
[manager setAcceptHeaderWithMIMEType:@"application/x-www-form-urlencoded"];
[manager setAcceptHeaderWithMIMEType:RKMIMETypeJSON];


[RKObjectManager setSharedManager:manager];
[RKMIMETypeSerialization registerClass:[RKNSJSONSerialization class] forMIMEType:@"application/x-www-form-urlencoded"];

RKObjectMapping *userMapping = [RKObjectMapping requestMapping];
[userMapping addAttributeMappingsFromDictionary:@{@"clientAccount" : @"clientAccount",
 @"docType" : @"docType",
 @"userId" : @"userId",
 @"class1" : @"class1",
 @"clientCode" : @"clientCode",
 @"requestType" : @"requestType",
 @"token" : @"token",
 @"documentNum" : @"documentNum"}];

RKRequestDescriptor *requestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:userMapping objectClass:[RequestInquiry class]                                       rootKeyPath:nil method:RKRequestMethodPOST];

[manager addRequestDescriptor:requestDescriptor];


[[manager HTTPClient] setDefaultHeader:@"X-Parse-REST-API-Key" value:@"inquiryData"];
[[manager HTTPClient] setDefaultHeader:@"X-Parse-Application-Id" value:@"inquiryData"];


//Set up Request Header
[[manager HTTPClient] setDefaultHeader:@"clientAccount" value:@"6"];
[[manager HTTPClient] setDefaultHeader:@"docType" value:@"T"];
[[manager HTTPClient] setDefaultHeader:@"userId" value:@"uid01"];
[[manager HTTPClient] setDefaultHeader:@"class1" value:headerClass];
[[manager HTTPClient] setDefaultHeader:@"clientCode" value:@"02"];
[[manager HTTPClient] setDefaultHeader:@"requestType" value:@"submit"];
[[manager HTTPClient] setDefaultHeader:@"token" value:@"f3a6a4dc1c8f77d79a1a1f6a5d439933"];
[[manager HTTPClient] setDefaultHeader:@"documentNum" value:@"439299827"];
//[[manager HTTPClient] setDefaultHeader:@"contenttype" value:@"application/x-www-form-urlencoded"];

//End setup Request Header


NSManagedObjectModel *managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];
RKManagedObjectStore *managedObjectStore = [[RKManagedObjectStore alloc] initWithManagedObjectModel:managedObjectModel];
manager.managedObjectStore = managedObjectStore;

RKObjectMapping *errorMapping = [RKObjectMapping mappingForClass:[RKErrorMessage class]];

[errorMapping addPropertyMapping:[RKAttributeMapping attributeMappingFromKeyPath:nil toKeyPath:@"errorMessage"]];

RKResponseDescriptor *errorDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:errorMapping
                                                                                pathPattern:nil
                                                                                keyPath:@"error"
                                                                                //statusCodes:[NSIndexSet indexSetWithIndex:200]];
                                                                                statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassClientError)];

[manager addResponseDescriptorsFromArray:@[errorDescriptor]];


NSDictionary *parentObjectMapping = @{
                                      @"inquiryStatus" : @"inquiryStatus",
                                      @"entityNo" : @"entityNo",
                                      @"docType" : @"docType",
                                      @"docNumber" : @"docNumber",
                                      @"mvNumber" : @"mvNumber",
                                      @"totalAmount" : @"totalAmount"
                                      };


RKEntityMapping *ticketParentMapping = [RKEntityMapping mappingForEntityForName:NSStringFromClass([TicketParent class]) inManagedObjectStore:manager.managedObjectStore];
ticketParentMapping.identificationAttributes = @[ @"entityNo" ];
[ticketParentMapping addAttributeMappingsFromDictionary:@{
 @"mvType" : @"mvType"
 }];
[ticketParentMapping addAttributeMappingsFromDictionary:parentObjectMapping];


/**
 Complete Core Data stack initialization
 */

[managedObjectStore createPersistentStoreCoordinator];

NSString *storePath = [RKApplicationDataDirectory() stringByAppendingPathComponent:@"TicketParent.sqlite"];

NSError *error;

NSPersistentStore *persistentStore = [managedObjectStore addSQLitePersistentStoreAtPath:storePath fromSeedDatabaseAtPath:nil  withConfiguration:nil options:@{NSMigratePersistentStoresAutomaticallyOption:@YES, NSInferMappingModelAutomaticallyOption:@YES} error:&error];

NSAssert(persistentStore, @"Failed to add persistent store with error: %@", error);

// Create the managed object contexts
[managedObjectStore createManagedObjectContexts];

// Configure a managed object cache to ensure we do not create duplicate objects
managedObjectStore.managedObjectCache = [[RKInMemoryManagedObjectCache alloc] initWithManagedObjectContext:managedObjectStore.persistentStoreManagedObjectContext];

// Request Object with json paramaters
RequestInquiry *requestInquiry = [[RequestInquiry alloc] init];
requestInquiry.docType = @"T";
requestInquiry.documentNum = @"439299827";
requestInquiry.clientAccount = @"6";
requestInquiry.clientCode = @"02";
requestInquiry.token = @"f3a6a4dc1c8f77d79a1a1f6a5d439933";
requestInquiry.requestType = @"submit";
requestInquiry.userId = @"uid01";
requestInquiry.class1 = @"class com.rest.client.JsonRequest";

[manager postObject:requestInquiry path:@"/RestIVR/restservices/ticketservices/jinquiry" parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *ticketParentMapping)
 {
     RKLogError(@"%@",ticketParentMapping);
 }
            failure:^(RKObjectRequestOperation *operation, NSError *error)
 {
     RKLogError(@"%@",error);
 }];

post对象不能是
nil
,关键是您正在尝试发布该对象。204响应基本上是确认服务器收到了您的请求,但没有工作要做

您使用的路径不应是完整的URL。您使用
managerWithBaseURL
配置管理器,因此该路径应是
getDataURL
上的附加部分


您在(400-499)中获得了预期的状态代码,在(400-499)中获得了204“,因为您已经配置了一个良好的通用错误处理响应描述符(适用于任何对象,因为路径模式为
nil
。您还应该为成功案例指定响应描述符。您创建
ticketParentMapping
,但从未实际将其用于任何对象…

如上所述,POST意味着您正在传递的对象将根据请求描述符进行序列化您指向的URL

零是行不通的。
另外,您还没有设置RequestDescriptor对我来说有意义。我认为,因为我是通过HTTPClient设置在代码顶部设置请求头的。因此,我添加了一个名为“RequestInquiry”的新类"它包含我的REST服务作为请求的一部分所期望的所有属性,然后将该对象添加到objectPost参数中,但是,我仍然得到一个204错误代码。我也接受了您的建议并修复了URL,但仍然没有成功。ticketParentMapping稍后将在我的代码中使用。我非常感谢您的快速且信息丰富的响应nse。再次感谢。我将继续研究并发布响应。您为
RequestInquiry
和关联的请求描述符创建了一个映射?使用RKObjectManager参考指南中的示例,我创建了一个名为RequestInquiry的.h和.m类文件,并将参数创建为类中的属性。然后我创建了一个对象(请求查询)在基于RequestInquiry的代码中,将属性设置为我的REST服务期望的值,然后通过postObject:RequestInquiry传递对象。同样基于@tekstop下面的注释,我创建了一个带有映射的RequestDescriptor。如果有帮助的话,我可以重新发布我的代码。进行了一些突破,并将我的请求描述符拉直d out。但是,我现在收到下面的错误。关于解决方案的任何建议。错误:NSLocalizedDescription=预期的内容类型{(“应用程序/x-www-form-urlencoded”,“应用程序/json”)},获取文本/plain,AFNetworkingOperationFailingURLResponseErrorKey=}更新问题中的代码。看起来服务器返回了错误的类型。是否设置了Accept标头?我相信我已经纠正了在postObject中使用nil的问题,并且我也采纳了您的建议,创建了RequestDescriptor(很好的调用)但是,仍然得到204错误代码。非常感谢您的快速和有用的响应。如果您能想到我做错了什么,请告诉我。问题解决了。在将日志中出现的每个标题参数输入到WizTools后,我发现Accept参数被设置为“application/x-www-form-urlencoded”通过使用manager setAcceptHeaderWithMIMEType:@“application/x-www-form-urlencoded”];一旦我注释掉该语句,我就开始得到200响应代码。
- (void)setupRestKitTutorial{
NSLog(@"setupRestKitTutorial - Start");

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

RKObjectManager *manager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:getDataURL]];
[manager setRequestSerializationMIMEType:RKMIMETypeJSON];
[manager setAcceptHeaderWithMIMEType:@"application/x-www-form-urlencoded"];
[manager setAcceptHeaderWithMIMEType:RKMIMETypeJSON];


[RKObjectManager setSharedManager:manager];
[RKMIMETypeSerialization registerClass:[RKNSJSONSerialization class] forMIMEType:@"application/x-www-form-urlencoded"];

RKObjectMapping *userMapping = [RKObjectMapping requestMapping];
[userMapping addAttributeMappingsFromDictionary:@{@"clientAccount" : @"clientAccount",
 @"docType" : @"docType",
 @"userId" : @"userId",
 @"class1" : @"class1",
 @"clientCode" : @"clientCode",
 @"requestType" : @"requestType",
 @"token" : @"token",
 @"documentNum" : @"documentNum"}];

RKRequestDescriptor *requestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:userMapping objectClass:[RequestInquiry class]                                       rootKeyPath:nil method:RKRequestMethodPOST];

[manager addRequestDescriptor:requestDescriptor];


[[manager HTTPClient] setDefaultHeader:@"X-Parse-REST-API-Key" value:@"inquiryData"];
[[manager HTTPClient] setDefaultHeader:@"X-Parse-Application-Id" value:@"inquiryData"];


//Set up Request Header
[[manager HTTPClient] setDefaultHeader:@"clientAccount" value:@"6"];
[[manager HTTPClient] setDefaultHeader:@"docType" value:@"T"];
[[manager HTTPClient] setDefaultHeader:@"userId" value:@"uid01"];
[[manager HTTPClient] setDefaultHeader:@"class1" value:headerClass];
[[manager HTTPClient] setDefaultHeader:@"clientCode" value:@"02"];
[[manager HTTPClient] setDefaultHeader:@"requestType" value:@"submit"];
[[manager HTTPClient] setDefaultHeader:@"token" value:@"f3a6a4dc1c8f77d79a1a1f6a5d439933"];
[[manager HTTPClient] setDefaultHeader:@"documentNum" value:@"439299827"];
//[[manager HTTPClient] setDefaultHeader:@"contenttype" value:@"application/x-www-form-urlencoded"];

//End setup Request Header


NSManagedObjectModel *managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];
RKManagedObjectStore *managedObjectStore = [[RKManagedObjectStore alloc] initWithManagedObjectModel:managedObjectModel];
manager.managedObjectStore = managedObjectStore;

RKObjectMapping *errorMapping = [RKObjectMapping mappingForClass:[RKErrorMessage class]];

[errorMapping addPropertyMapping:[RKAttributeMapping attributeMappingFromKeyPath:nil toKeyPath:@"errorMessage"]];

RKResponseDescriptor *errorDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:errorMapping
                                                                                pathPattern:nil
                                                                                keyPath:@"error"
                                                                                //statusCodes:[NSIndexSet indexSetWithIndex:200]];
                                                                                statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassClientError)];

[manager addResponseDescriptorsFromArray:@[errorDescriptor]];


NSDictionary *parentObjectMapping = @{
                                      @"inquiryStatus" : @"inquiryStatus",
                                      @"entityNo" : @"entityNo",
                                      @"docType" : @"docType",
                                      @"docNumber" : @"docNumber",
                                      @"mvNumber" : @"mvNumber",
                                      @"totalAmount" : @"totalAmount"
                                      };


RKEntityMapping *ticketParentMapping = [RKEntityMapping mappingForEntityForName:NSStringFromClass([TicketParent class]) inManagedObjectStore:manager.managedObjectStore];
ticketParentMapping.identificationAttributes = @[ @"entityNo" ];
[ticketParentMapping addAttributeMappingsFromDictionary:@{
 @"mvType" : @"mvType"
 }];
[ticketParentMapping addAttributeMappingsFromDictionary:parentObjectMapping];


/**
 Complete Core Data stack initialization
 */

[managedObjectStore createPersistentStoreCoordinator];

NSString *storePath = [RKApplicationDataDirectory() stringByAppendingPathComponent:@"TicketParent.sqlite"];

NSError *error;

NSPersistentStore *persistentStore = [managedObjectStore addSQLitePersistentStoreAtPath:storePath fromSeedDatabaseAtPath:nil  withConfiguration:nil options:@{NSMigratePersistentStoresAutomaticallyOption:@YES, NSInferMappingModelAutomaticallyOption:@YES} error:&error];

NSAssert(persistentStore, @"Failed to add persistent store with error: %@", error);

// Create the managed object contexts
[managedObjectStore createManagedObjectContexts];

// Configure a managed object cache to ensure we do not create duplicate objects
managedObjectStore.managedObjectCache = [[RKInMemoryManagedObjectCache alloc] initWithManagedObjectContext:managedObjectStore.persistentStoreManagedObjectContext];

// Request Object with json paramaters
RequestInquiry *requestInquiry = [[RequestInquiry alloc] init];
requestInquiry.docType = @"T";
requestInquiry.documentNum = @"439299827";
requestInquiry.clientAccount = @"6";
requestInquiry.clientCode = @"02";
requestInquiry.token = @"f3a6a4dc1c8f77d79a1a1f6a5d439933";
requestInquiry.requestType = @"submit";
requestInquiry.userId = @"uid01";
requestInquiry.class1 = @"class com.rest.client.JsonRequest";

[manager postObject:requestInquiry path:@"/RestIVR/restservices/ticketservices/jinquiry" parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *ticketParentMapping)
 {
     RKLogError(@"%@",ticketParentMapping);
 }
            failure:^(RKObjectRequestOperation *operation, NSError *error)
 {
     RKLogError(@"%@",error);
 }];