试图与RestKit POST请求和映射到核心数据的响应(Trying to make a POST

2019-08-04 08:39发布

我使用RestKit框架,我想打一个POST HTTP请求。 响应是JSON。 我想自动把JSON响应的CoreData。

我不知道叫什么方法,使该请求。 我知道,我应该使用RKObjectManager的方法,但我没有找到合适的人。

我发现这个方法postObject:delegate:但我不什么物件,做为参数。 我还发现文档这个方法: loadObjectsAtResourcePath:usingBlock:但我不能使用它,因为它告诉我:

No visible @interface for 'RKObjectManager' declares the selector 'loadObjectsAtResourcePath:usingBlock:'

Answer 1:

弗拉德 - 首先,让我们来代替回答你原来的问题:

我假设你正在关闭RestKit 0.20.0,但熟悉RestKit 0.10.x API和正在咨询过时的信息。 你应该打开的第一个地方是RKObjectManager.h -头总是会是最新的,并且将包含哪些方法可用文档。 接下来,您可以随时查看从源代码建立在最新的文档的最新API文档的网站 。

你想在这里做的是创建一个RKObjectRequestOperation

NSDictionary *dictionary = @{ @"firstParam": @(12345), @"secondParam": @"whatever"};
NSMutableURLRequest *request = [objectManager requestWithObject:nil method:RKRequestMethodPOST path:@"/whatever" parameters:parameters];
RKObjectRequestOperation *operation = [objectManager objectRequestOperationWithRequest:request success:^(RKObjectRequestOperation *operation, RKMappingResult *result) {
    NSLog(@"Loading mapping result: %@", result);
} failure:nil];

如果你正在尝试的目标核心数据,那么你会希望使用RKManagedObjectRequestOperationmanagedObjectRequestOperationWithRequest:success:failure: 。 上有RestKit Github上的网站,并在标头文档在README.md可用的附加实施例和有一吨的在单元测试参考代码。


接下来,响应来自JRG-开发者的评论:

咳咳,这是有很多原因一个真正可怕的答案。 (免责声明:我RestKit的主要开发者)

首先,您使用的是什么版本RestKit的? 如果您(在0.20.x预发行系列IE)使用最新版本,那么为对象的装载集合的方法已被替换为更好的名称: getObjectsAtPath: 这两个API文档(在完全记录制作由通路请求 ),并在0.10〜0.20的迁移指南 。

我怀疑是原来的问题从这里指的是过时的文档最近代码一起茎。

接下来,你推荐的技术堆栈是更为复杂的设置和使用来实现这一目标RestKit为您提供的,一旦你真正了解图书馆同样的事情。

让我们一起来看看这款逐点:

  1. AFNetworking

    • AFN是执行异步联网操作一个伟大的,轻量级的库。 如果你觉得RestKit的含有大量的工具实现客户端API的一个工具箱,然后AFN是锤。
    • 我有极大的尊重AFN和RestKit 0.20.x,我们向我们的老龄化网络家酿库赞成AFNetworking的,因为它的设计明显优于RestKit定制的网络协议栈已经挂以来的iOS 3.0。 AFN独自一人,然而,这并不为你提供足够的火力完全实现与核心数据集成的API,而无需核心数据的深入了解和实施了大量的同步代码自己。
    • RestKit的对象映射系统为您提供了配置这些同步活动,而不是你自己实现他们一个高性能的,一致的API。 这使一些严重的性能优化,我将返回到后来。
  2. JSONKit

    • JSONKit是我评价很高持有另一个库,但它可能不值得你的时间。 相较于NSJSONSerialization ,JSONKit的JSON解析速度是出众-但只能通过毫秒。
    • 正如有人谁已经实施了大客户API广泛部署的应用程序,我可以告诉你,你的时间是不会在JSON序列化/反序列化到花,但一旦被反序列化是处理你的JSON的代码。
  3. MagicalRecord

    • MagicalRecord是一个核心数据方便库,提供了一种用于在核心数据的现有功能速记访问器。 它是不会改善你的生活一旦你进入的什么是真正需要实现HTTP发送到核心数据同步方案的具体细节。 您的问题将有什么核心数据的语法做撷取要求过于冗长,但暂时不方便保持你的管理对象上下文,或者与获得核心数据堆栈设置的参考。

因此,让我们来谈谈真正的问题是与执行的是iOS / OS X应用程序模型的API为核心的数据了一会儿什么:

  1. 异步访问
    • 你要碰到的第一个问题是,你是用来编程同步,主线程化的方式,但现在你需要火了加载您的JSON的AFNetworking请求,但随后将其加载到你的对象模型。 没问题,只要等待AFJSONRequestOperation给你打回去的成功块和更新核心数据,对不对? 错误。 现在你在做你的网络I / O异步,但后来做在主线程中更新数据模型的CPU密集型任务。 现在,您的应用程序性能和吸你不知道该怎么办才好。 如何移动的同步进入后台? 你如何通知UI一旦其做了什么?
  2. 错误处理
    • 当你打一个错误,会发生什么? 什么意思时,你会得到一个网络错误怎么办? 你做什么,当网络操作完成,但你在核心数据访问打一个错误? 你将如何处理呢? 你打算把这个错误处理代码转换成所有的控制器? 你将如何来封装所有的逻辑是什么?
    • 你打算如何处理那些由服务器返回的错误?
  3. 唯一的对象标识
    • 好了,现在你已经加载了JSON和你想要把它放到核心数据。 大。 你将如何在商店内区分现有对象与要创建需要新的?
    • 如果你犯了这个错误,你现在有重复的对象。
    • 如果你得到这个权利,但是从主线程上下文做到这一点,你的UI被阻塞,你的表现很烂。
    • 如果你得到这个权利,但这样做在后台线程你可能有并发问题。
    • 如果你得到这个权利,但却打在了持久性存储与读取请求,以确定您的唯一对象,你现在有一个性能问题。
  4. 删除孤立对象
    • 一旦你同步数据与服务器设置,你打算怎么把从本地存储在服务器上不再存在去除死皮对象的照顾?
  5. 性能
    • 正如我在这个咆哮的几个早期部分所提到的,所有的道路最终会导致性能。 如果你实际上是试图建立的东西,将工作和取悦客户的大规模,你将有严重的性能问题作斗争。 头晕了。

有一些额外的问题,你将有一次申请成功,包括可测试性,可维护性等多少钱,你在想这些事情作斗争?

我想我在这里的主要观点是(从我的角度)太经常听到疯狂的欢呼或戏弄约如何解决基本的工程问题花生画廊到来。 现实情况是,解决问题至关重要复杂性将有一个学习曲线,该问题正在接洽这是相对的。

这是远远容易采取的功能的离散片并敲定满意的解决方案比它试图接近一个更大,更有趣的问题。

但是,这并不意味着你会产生由捆绑在一起的一堆,你听说过提供比一个更大的方法来聚合问题一个问题的一个子集的很好的实现库的更强大的解决方案。

为什么没有任何开源自己AFN / JSONKit /核心数据/ MagicalRecord混搭和打击RestKit出来的水,如果他们这么多比RestKit好?

恐怕清醒的事实是:它仅仅是不那么容易。

干杯!



文章来源: Trying to make a POST request with RestKit and map the response to Core Data