Restkit 0.20上的简单JSON登录帖子

时间:2013-10-28 10:37:11

标签: json restkit restkit-0.20

我遵循this old answer.的步骤。主要问题是RKObjectLoaderDelegate已被删除,我找不到任何适合我的替代方案。我试图用邮件/密码连接到服务器发送邮件请求给json。此外,我将使用json从数据库中获取数据,我测试它的工作正确。有人可以帮我这个吗?我使用RESTkit

    //Autentificacion
NSURL* url = [[NSURL alloc]initWithString:@"http://myurl.com/tokens.json"];
RKObjectManager* objectManager = [RKObjectManager managerWithBaseURL:url];
objectManager = [RKObjectManager managerWithBaseURL:url];

就像我之前说的那样,我试图做一个JSON登录帖子,但不同的例子对我不起作用,我正在寻找一些简单的方法在restkit 0.20上做。我知道怎么做GET而不是POST。

2 个答案:

答案 0 :(得分:11)

首先,我创建了一个名为Login Request的类。

LoginRequest.h

#import <Foundation/Foundation.h>
#import "RKObjectMapping.h"

@interface LoginRequest : NSObject
@property (nonatomic, strong) NSString* email;
@property (nonatomic, strong) NSString* password;

+(RKObjectMapping*)defineLoginRequestMapping;
@end

LoginRequest.m

#import "LoginRequest.h"
#import "RKObjectManager.h"

@implementation LoginRequest
@synthesize email;
@synthesize password;

+(RKObjectMapping*)defineLoginRequestMapping   {

    RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[LoginRequest class]];

    [mapping addAttributeMappingsFromDictionary:@{
                                                  @"email":   @"email",
                                                  @"password":   @"password",
                                                  }];


    return mapping;

}

然后,我创建了一个LoginManager类来进行连接。

LoginManager.h

#import <Foundation/Foundation.h>
#import "RKObjectManager.h"
#import "LoginResponse.h"
#import "LoginRequest.h"

@interface LoginManager : NSObject
@property (nonatomic, strong) LoginRequest *dataObject;
@property (nonatomic, strong) RKObjectManager *objectManager;
@property (nonatomic, strong) AFHTTPClient * client;
-(void)LoginWithUserName:(NSString *)username password:(NSString*)password;

@end

LoginManager.m

#import "LoginManager.h"
#import "RKMIMETypeSerialization.h"
#import "RKLog.h"
#import "LoginRequest.h"


@implementation LoginManager

-(void)LoginWithUserName:(NSString *)email password:(NSString*)password {

    LoginRequest *dataObject = [[LoginRequest alloc] init];
    [dataObject setEmail:email];
    [dataObject setPassword:password];



    NSURL *baseURL = [NSURL URLWithString:@"http://www.myurl.com/tokens.json"];

    AFHTTPClient * client = [AFHTTPClient clientWithBaseURL:baseURL];
    [client setDefaultHeader:@"Accept" value:RKMIMETypeJSON];

    RKObjectManager *objectManager = [[RKObjectManager alloc] initWithHTTPClient:client];


    RKObjectMapping *requestMapping =  [[LoginRequest defineLoginRequestMapping] inverseMapping];

    [objectManager addRequestDescriptor: [RKRequestDescriptor
                                          requestDescriptorWithMapping:requestMapping objectClass:[LoginRequest class] rootKeyPath:nil
                                          ]];
    // what to print
    RKLogConfigureByName("RestKit/Network", RKLogLevelTrace);
    RKLogConfigureByName("Restkit/Network", RKLogLevelDebug);

    RKObjectMapping *responseMapping = [LoginResponse defineLoginResponseMapping];

    [objectManager addResponseDescriptor:[RKResponseDescriptor
                                          responseDescriptorWithMapping:responseMapping method:RKRequestMethodAny pathPattern:@"" keyPath:nil statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)

                                          ]];


    [objectManager setRequestSerializationMIMEType: RKMIMETypeJSON];

    [objectManager postObject:dataObject path:@""
                   parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
                       NSLog(@"It Worked: %@", [mappingResult array]);

                   } failure:^(RKObjectRequestOperation *operation, NSError *error) {
                       NSLog(@"It Failed: %@", error);

                   }];
}

最后,我在MasterViewController.m

上调用viewDidLoad上的方法
[[LoginManager alloc] LoginWithUserName:@"mymail@test.com" password:@"mypassword"];

答案 1 :(得分:-1)

我想Restkit已经包含了AFNetworking 2.0库。所以我认为这会奏效:

RestKit是一个现代的Objective-C框架,用于在iOS和Mac OS X上实现RESTful Web服务客户端。它提供了一个功能强大的对象映射引擎,可以与Core Data无缝集成,还有一组简单的网络基元用于映射HTTP基于 AFNetworking

的请求和响应

发布示例:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
NSDictionary *parameters = @{@"foo": @"bar"};
[manager POST:@"http://example.com/resources.json" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"JSON: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Error: %@", error);
}];