【问题标题】:RestKit serialization creating duplicate entriesRestKit 序列化创建重复条目
【发布时间】:2016-03-30 04:06:35
【问题描述】:

使用 Restkit 保存到我的数据库时,我得到重复的条目。

我不确定如何防止这种情况。预期的行为是,如果对象已经存在,那么它应该使用恰好不同的列更新现有对象。

我在这里设置了一个密钥标识符:

[mapping setIdentificationAttributes:@[MYObjectAttributes.userID]];

但我想我还有其他事情要做。我已经看到其他与 core-data 更相关的问题,它们手动执行获取请求以查找现有条目,在编写之前,这似乎很昂贵,restkit 应该已经有了解决方案。

【问题讨论】:

  • 你给store manager加缓存了吗?
  • @Wain managedObjectStoreRKObjectManager?是的。
  • 您正在使用该对象管理器来下载和管理映射?
  • MYObjectAttributes.userID 的值是多少?
  • @ErikJohansson 目前它们是代表社交媒体用户帐户的用户 ID 的字符串(但它们一直是整数,但没有区别)。它没有找到现有条目并覆盖它们(或不写它们)

标签: ios core-data restkit nsfetchrequest


【解决方案1】:

RestKit 用于将 RESTful 服务映射到核心数据。如果您没有使用 RKObjectManager 进行更新(也就是说,您想在 REST 服务上放置一些东西)并且只想进行本地更改,您应该获取托管对象并在 RestKit 的上下文之外使用它。

如果您需要检查本地是否存在托管对象,您应该使用托管对象上下文来执行此操作,而不是尝试使用 RestKit。

【讨论】:

    【解决方案2】:

    除了属性,您还可以检测托管对象是否是新的。 RestKit 在 NSManagedObject 上创建了一个类别,它提供了 1 个功能:

    /**
     * Returns YES when an object has not been saved to the managed object context yet
     */
    @property (nonatomic, readonly) BOOL isNew;
    

    https://github.com/RestKit/RestKit/blob/fc101de9133d96bc0e2221153de7f699f8c1f06d/Code/CoreData/NSManagedObject%2BRKAdditions.m

    【讨论】:

    • 自动映射并保存到核心数据时,我该怎么做?
    猜你喜欢
    • 1970-01-01
    • 2017-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-15
    相关资源
    最近更新 更多