代码之家  ›  专栏  ›  技术社区  ›  MidouCloud

Restkit 0.20上的简单JSON登录帖子

  •  3
  • MidouCloud  · 技术社区  · 13 年前

    我正在遵循的步骤 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 回复  |  直到 9 年前
        1
  •  11
  •   MidouCloud    13 年前

    首先,我创建了一个名为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
    

    登录请求.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类来进行连接。

    登录管理员.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
    

    登录管理员.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"];
    
        2
  •  -1
  •   zer02    13 年前

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

    RestKit是一个现代的Objective-C框架,用于在iOS和Mac OS X上实现RESTful web服务客户端。它提供了一个强大的对象映射引擎,可以与核心数据无缝集成,并提供了一组简单的网络原语,用于映射HTTP请求和响应 AF网络

    张贴示例:

    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);
    }];