当前位置: 首页 > 面试题库 >

使用RESTKit做一个简单的JSON POST

孙佐
2023-03-14
问题内容

我是iOS开发的新手,我无法提出一个简单的Json
POST请求。我有一个包含用户名和密码的NSDictionary,我想将这些值作为Json发送到服务器并获得响应。我在不使用restkit的情况下进行了工作,但是我无法弄清楚如何使用RestKit来完成相同的工作,而且也找不到我想要的很好的例子。

- (bool) login{

    NSMutableDictionary* params = [[NSMutableDictionary alloc] init];
    [params setValue:self.email forKey:@"email"];
    [params setValue:self.password forKey:@"password"];

    NSMutableDictionary* rpcData = [[NSMutableDictionary alloc] init];
    [rpcData setValue:@"2.0" forKey:@"jsonrpc"];
    [rpcData setValue:@"authenticate" forKey:@"method"];
    [rpcData setValue:@"" forKey:@"id"];
    [rpcData setValue:params forKey:@"params"];

    [[RKClient sharedClient] post:@"/api/rpc/" params:rpcData delegate:self];
    return nil;
}

服务器期望这样的Json:

{
    jsonrpc : '2.0',
    method : 'authenticate', // method name goes here
    params : {  // params are method-specific
        email : 'test@test.com',
        password : 'secret'
    },
    id : 2  // The id can be anything, it will be sent back with the response
}

我知道RestKit中包含一个Json解析器,但是我找不到有关如何解析rpcData字典的任何文档,我是否需要使用外部库?

现在与服务器的通信还可以,但是我没有发送期望的消息。我的字典的映射方式为“键=值?键2 =值2 …”。这是一个很愚蠢的问题,但我被困住了。

更新资料

在我撰写本文时,它已经可以使用,但是Restkit已更新,所以我不确定是否可以使用,请查看其文档

这是我的问题的解决方案,当您需要调用服务时,我正在做的事情非常适合使用RPC API:

1.-首先,在您的对象中,您需要导入Restkit和RKRequestSerialization,这非常重要:

#import <RestKit/RestKit.h>
#import <RestKit/RKRequestSerialization.h>

@interface myObject : NSObject <RKRequestDelegate,RKObjectLoaderDelegate>

2.-这是发送帖子的登录功能:

- (void) login:(NSString *)username :(NSString *)password{

    RKClient *myClient = [RKClient sharedClient];
    NSMutableDictionary *rpcData = [[NSMutableDictionary alloc] init ];
    NSMutableDictionary *params = [[NSMutableDictionary alloc] init];

    //User and password params
    [params setObject:password forKey:@"password"];
    [params setObject:username forKey:@"email"];

    //The server ask me for this format, so I set it here:
    [rpcData setObject:@"2.0" forKey:@"jsonrpc"];
    [rpcData setObject:@"authenticate" forKey:@"method"];
    [rpcData setObject:@"" forKey:@"id"];
    [rpcData setObject:params forKey:@"params"];

    //Parsing rpcData to JSON! 
    id<RKParser> parser = [[RKParserRegistry sharedRegistry] parserForMIMEType:RKMIMETypeJSON];
    NSError *error = nil;
    NSString *json = [parser stringFromObject:rpcData error:&error];

    //If no error we send the post, voila!
    if (!error){
        [[myClient post:@"/" params:[RKRequestSerialization serializationWithData:[json dataUsingEncoding:NSUTF8StringEncoding] MIMEType:RKMIMETypeJSON] delegate:self] send];
    }
}

问题答案:

我遇到了同样的问题,这就是为我解决的问题。注意,在我的场景中,我只想访问RKRequest。

NSDictionarty *dict
NSError *error; 
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:0 error:&error];

if (!jsonData) 
{
    NSAssert(FALSE, @"Unable to serialize JSON from NSDict to NSData"); 
} 
else 
{
    NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
    request.params = [RKRequestSerialization serializationWithData:[jsonString dataUsingEncoding:NSUTF8StringEncoding] MIMEType:RKMIMETypeJSON];
}

对我来说,关键是最后一行中的“
MIMEType:RKMIMETypeJSON”。由于我只想使用RKRequest,因此这就是我需要设置MIME类型的方式。否则,我会使用保罗塞尚的建议。



 类似资料:
  • wex5是跨端移动开放框架,它与传统的前端页面开发最大的差异在于,采用了单页模式,实现了资源的不重复加载,那么如何做一个简单的门户页呢? 1.UI部分如图所示: 页面主要由contents以及其中一个content构成,content中放windowContainer组件,并在src属性中直接写入主页地址,这样有助于优化主页的打开速度。 2.创建shellImpl实例 index.w作为门户页面,

  • 柱形图是一种最简单的可视化图标,主要有矩形、文字标签、坐标轴组成。本文为简单起见,只绘制矩形的部分,用以讲解如何使用 D3 在 SVG 画布中绘图。 画布是什么 前几章的处理对象都是 HTML 的文字,没有涉及图形的制作。 要绘图,首要需要的是一块绘图的“画布”。 HTML 5 提供两种强有力的“画布”:SVG 和 Canvas。 SVG 是什么 SVG,指可缩放矢量图形(Scalable Vec

  • 本文向大家介绍使用Vue.js和Element-UI做一个简单登录页面的实例,包括了使用Vue.js和Element-UI做一个简单登录页面的实例的使用技巧和注意事项,需要的朋友参考一下 最近了解到Vue.js挺火的,有同学已经学习了,那我心里痒痒的也学习了一点,然后也学了一点Element组件,就做了简单的登录页面。 效果很简单: 代码如下: 前端页面 后台代码: 以上这篇使用Vue.js和El

  • 左边这块绿色的气泡,那个三角形应该怎么实现? 如果实现了,怎么改变三角形的位置,例如放气泡上面,下面,左边或右边?

  • 本文向大家介绍JQuery做的一个简单的点灯游戏分享,包括了JQuery做的一个简单的点灯游戏分享的使用技巧和注意事项,需要的朋友参考一下 最近屌丝被迫学习TypeScript(不学就会被开除,5555),所以得先学JavaScript,这下可好,所有网页相关的东西都得要有所了解,否则没法忽悠BOSS。 今天学了一小会JavaScript,这里先做了一个简单的点灯游戏,算是练手吧。其中用到了JQu

  • 本文向大家介绍Java中反射的一个简单使用,包括了Java中反射的一个简单使用的使用技巧和注意事项,需要的朋友参考一下 简介 首先介绍一些不太实用的解释:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。 简单使用 反射,在java中是非常常见和好用