gpt4 book ai didi

ios - RestKit 使用对象发帖并获取对象响应

转载 作者:行者123 更新时间:2023-11-28 20:10:32 24 4
gpt4 key购买 nike

我是 IOS 和 RestKit 的新手,不知道如何执行以下操作:

1. a simple POST to a webservice 
A) with an object payload
B) Have RestKit Auto Serialize the obj c object into Json

2. Receive the Response
A) Parse response and extract only certain fields and load into obj c object

我的设置如下:

来自网络服务的 Json 响应:

{
"user": {
"id":0,
"email":"String",
},
"errorCode": 0
}

来自 obj c 中 Web 服务的响应对象:

@interface CreateAccountResponse : NSObject

@property (nonatomic, copy) NSString *id;
@property (nonatomic, copy) NSString *email;
@property (nonatomic) NSInteger *errorCode;

@end

在对象 C 中请求对象:

@interface CreateAccountRequestModel : NSObject

@property (nonatomic, copy) NSString *email;
@property (nonatomic, copy) NSString *password;
@property (nonatomic, copy) NSString *first_name;
@property (nonatomic, copy) NSString *last_name;

@end

Webservice 在 POST 请求中期望这个 Json:

{
"email":"String",
"password":"String",
"first_name":"String",
"last_name":"String"
}

URL 是:www.hostname.com/api/AccountManager/createAccount,它只接受 POST 请求。

我尝试过的:

-(void)SendCreateAccountRequest:(CreateAccountRequestModel*)createActModel
{
NSString *createAccountUrl = @"www.hostname.com/api/AccountManager/createAccount";
NSLog(@"SendCreateAccountRequest");
RKObjectMapping* articleMapping = [RKObjectMapping mappingForClass: [CreateAccountResponse class]];
[articleMapping addAttributeMappingsFromDictionary:@{
@"id": @"user.id",
@"email": @"user.email",
@"errorCode": @"errorCode"
}];

RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:articleMapping method:RKRequestMethodAny pathPattern:nil keyPath:@"createAccount" statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];

NSURL *URL = [NSURL URLWithString:createAccountUrl];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];
RKObjectRequestOperation *objectRequestOperation = [[RKObjectRequestOperation alloc] initWithRequest:request responseDescriptors:@[ responseDescriptor ]];

[objectRequestOperation setCompletionBlockWithSuccess:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult)
{
RKLogInfo(@"Successful Response: %@", mappingResult.array);
}
failure:^(RKObjectRequestOperation *operation, NSError *error)
{
RKLogError(@"Operation failed with error: %@", error);
}];

[objectRequestOperation start];

我知道我没有正确地将 Web 服务的响应映射到对象,也没有正确创建 POST 请求。就像我说的,我是新来的,所以你提供的细节越多越好:)

最佳答案

用户对象

@interface User : NSObject

@property (nonatomic, copy) NSString *id;
@property (nonatomic, copy) NSString *email;
@property (nonatomic, copy) NSString *password;
@property (nonatomic, copy) NSString *first_name;
@property (nonatomic, copy) NSString *last_name;

@end

发布http://www.hostname.com/api/AccountManager/createAccount

响应 JSON

{
"id":0,
"email":"String",
}

在服务器上创建

- (void)createUserOnServer:(User *)user
{
RKObjectMapping *responseMapping = [RKObjectMapping mappingForClass:[User class]];
[responseMapping addAttributeMappingsFromArray:@[@"id",@"email"]];
NSIndexSet *statusCodes = RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful);
RKResponseDescriptor *userResponseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:responseMapping method:RKRequestMethodAny pathPattern:@"/createAccount" keyPath:@"article" statusCodes:statusCodes];

RKObjectMapping *requestMapping = [RKObjectMapping requestMapping]; // objectClass == NSMutableDictionary
[requestMapping addAttributeMappingsFromArray:@[@"email", @"password", @"first_name", @"last_name"]];

RKRequestDescriptor *requestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:requestMapping objectClass:[Article class] rootKeyPath:nil method:RKRequestMethodAny];

RKObjectManager *manager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:@"http://www.hostname.com/api/AccountManager"];
[manager addRequestDescriptor:requestDescriptor];
[manager addResponseDescriptor:articleDescriptor];
[manager postObject:user path:@"/createAccount" parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
NSLog(@"Create User Success");
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
NSLog(@"Create User Error: %@", error);
}];
}

PS:你最好完整阅读Restkit的README!!

PS2:HTTP statusCode 的错误代码更好

关于ios - RestKit 使用对象发帖并获取对象响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20463385/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com