【问题标题】:Class Design with RestKit + CoreData使用 RestKit + CoreData 进行类设计
【发布时间】:2014-03-11 21:44:43
【问题描述】:

我有一个相当基本的问题,我确信我缺少一些基本的东西,但这是我第一次使用 RK + CD,所以任何帮助都非常感谢。

我有一个数据集:

@interface A :NSManagedObject{
NSString *content;
NSString *userId;
}

我从一个视图将此发布到服务器。

在另一个视图中,我得到了这些数据集的列表。所以我从服务器得到了以下项目的数组。

理想情况下,我应该能够创建一个可用于 POST 和 GET 的基类 A。 但由于我将 GET 响应存储在 CoreData 中,因此 A 是一个 NSManagedObject。 GET 效果很好,我可以显示从服务器获取的所有条目,但这里是 POST 代码。

对于 POST,我的 requestDescriptor 如下所示:

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

我希望在发布该条目时执行以下操作,因为该条目不在我的核心数据中,而用户只是在我的 UI 中输入了它,我想在我的服务器上更新它而不是将其保存在 CD 中。

A *aObject = [[A new]init];
aObject.content = @"bla bla";
aObject.userId = "me";

    [[sharedObjectManager HTTPClient] setDefaultHeader:@"content-type" value:RKMIMETypeJSON];
[sharedObjectManager setRequestSerializationMIMEType:RKMIMETypeJSON];

// POST to create
[sharedObjectManager postObject:aObject path:POST parameters:nil success:nil failure:nil];

但我不能这样做,因为“A”是托管对象,我得到了这个错误 2014-03-11 13:55:22.511[39817:70b] CoreData:错误:无法调用 NSManagedObject 类“A”上的指定初始化程序 2014-03-11 13:55:22.511 [39817:70b]-[A setContent:]:无法识别的选择器发送到实例 0x8d41360

我是否必须创建 2 份 A 类副本——一份用于 POST(托管),一份用于 GET(非托管)——这似乎是一种可怕的浪费,尤其是在有很多 POST 和 GET api 的情况下?

谢谢!

【问题讨论】:

    标签: ios core-data restkit


    【解决方案1】:

    没有。你不需要这样做:

    A *aObject = [[A new]init];
    

    您应该在 MOC 中创建(插入)新实例。通常,当您执行此操作时,该项目是一个存根对象(部分填充了数据),并将根据您从服务器收到的响应填充。

    您不需要这样做。如果您不想要存根对象,则可以使用另一个类(自定义或字典,具体取决于您发布的内容数量)。

    【讨论】:

    • 感谢您的快速回复 - 我只是在编辑我的问题以便更容易理解 :) 我如何使用字典发布? postObject 函数会采用键值对字典吗?如果是的话,我的 requestDescriptor 会是什么样子?
    • [NSDictionary class]外,描述符相同。这种方法只有在你只发布 1 个东西时才真正有效(因为你有 1 个映射链接到字典类......)
    • 你的意思是如果我只有一个 POST api?
    • 基本上是的。您可以作弊并创建一个涵盖所有字典的超级映射,但这并不好。 NSObject 的自定义子类更好...
    • 我明白了!所以如果我在 MOC 中创建一个对象,我需要将它与我从服务器获得的响应进行协调。基本上,当客户端 POST 时,服务器会为该帖子创建一个新 ID,将其添加到其数据库中,并将其发送出去给大家。现在,当我在 GET 响应中得到它时,协调 2 的最佳方法是什么?我应该在 POST 响应中跟踪 ID 保留返回吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多