RestKit 对象与外键的映射关系

2024-04-27

RestKit 是否可以在不将外键存储为属性的情况下连接关系,即直接从 JSON 中的键路径存储?

特别是,我有一个 Job has_many Rooms 关系。房间的 JSON 不包含作业,而是分别加载:

- job: {
    id: 1,
    name: "John"
}

- room: {
    id: 4,
    job_id: 1,
    name: "spare bedroom"
}

作业在房间之前加载。

我的 CoreData 模型,作业具有以下属性

@interface Job : NSManagedObject
@property (nonatomic, retain) NSNumber * identifier;
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSSet *rooms;
@end

@interface Room : NSManagedObject
@property (nonatomic, retain) NSNumber * identifier;
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) Job *job;
@end

目前我添加一个@property (nonatomic, strong) NSNumber *jobID;到房间,我@synthesize.

JobMapping:
    mapping = [RKManagedObjectMapping mappingForClass:[Job class]];
    [mapping setPrimaryKeyAttribute:@"identifier"];

    [mapping mapAttributes:@"name", nil];
    [mapping mapKeyPath:@"id" toAttribute:@"identifier"];

    [mapping mapRelationship:@"rooms" withMapping:[Room objectMapping]];



RoomMapping
    mapping = [RKManagedObjectMapping mappingForClass:[Room class]];
    [mapping setPrimaryKeyAttribute:@"identifier"];

    [mapping mapAttributes:@"name", nil];
    [mapping mapKeyPath:@"id" toAttribute:@"identifier"];
    [mapping mapKeyPath:@"job_id" toAttribute:@"jobID"];

    [mapping mapRelationship:@"job" withMapping:[Job objectMapping]];

    [mapping connectRelationship:@"job" withObjectForPrimaryKeyAttribute:@"jobID"];

我想知道是否有一种方法可以在没有额外的 jobID 属性的情况下做到这一点?我不想在 CoreData xcdatamodeld 中拥有 jobID 属性 - 它是多余的,因为关系涵盖了这一点。

另外,如果我重建 NSManagedObjects,我需要重新添加 jobID 属性,这很繁琐。我不能告诉restkit 通过 JSON 中的 job_id keypath 将 Room 连接到其相应的 Job 吗?

如果我移除该财产,mapKeyPath:@"job_id"行,并将最后一行更改为[mapping connectRelationship:@"job" withObjectForPrimaryKeyAttribute:@"job_id"]; I get

the entity Room is not key value coding-compliant for the key "job_id".

我会将 JobId 设置为核心数据中的瞬态值,并编写一个自定义集并获取它。

该集合会将关系设置为 self.job=methodToReturnObjectMatchingJobId(这将由休息套件使用)

get 将返回 self.job.identifier

如果您不使用 mogenerator,我建议您看看它以满足您的所有核心数据需求。

下面是我如何做到这一点的示例代码:

-(void) setClaimId:(NSNumber *)claimId{
     Claim *propertyClaim=[Claim listItemFromId:[claimId intValue] withContext:self.managedObjectContext]; 

    self.claim=propertyClaim; 
}
-(NSNumber*) claimId{

  return self.claim.referenceId;
}

其中 listItemFromId 是一个简单的查询,它根据 id 返回对象。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RestKit 对象与外键的映射关系 的相关文章

  • CoreData 按属性划分的唯一对象

    我有一个图表 其中包含一种名为 消息 的对象 一条消息可以有子项 因此该图是一棵树 图上的每个对象都包含一个属性值 这是一种 UUID 全局唯一 因此存储不能包含具有相同 UUID 的多条消息 此 uuid 是从消息数据中获取的字符串 因此
  • 从核心数据中获取子项总和

    假设我有三个实体 Person 姓名 地址 对多工资 和 对多贷款 Salary 收入 税 相对 对一个人 Bills数量 相对 对一个人 如何执行获取结果如下 John Doe SUM gt 收入 SUM gt 金额 Eva Doe SU
  • 父/子 NSManagedObjectContext 的正确实现

    我的应用程序有时会将不一定要保存的对象插入到托管对象上下文中 例如 当我启动 添加实体 模式时 我创建一个托管对象并将其分配给该模式 如果用户从该模式保存 我会保存上下文 如果他取消 我会删除该对象并且无需保存 我现在引入了一个 导入 功能
  • CoreData 获取孩子的父母

    我有一个one to many关系store lt gt gt product 并且我知道该产品 我如何才能找到该产品的父级是谁 例如 我可以拥有许多具有相同值的产品product1 has parent1以及具有相同值的另一种产品prod
  • 复杂对象上的自定义 NSSortDescriptor

    这是我的第一篇文章 如果我可能不尊重所有惯例 我很抱歉 尽管我会尽力而为 我以前总是在 SO 上找到解决我的问题的方法 但我完全陷入了一个相当复杂的可可问题 我正在尝试对 CoreData 对象列表进行复杂的排序 我有一个由 Book 对象
  • 获取实体的请求。attribute == @"somevalue"

    如何设置提取请求以仅从具有一个特定值的实体属性中提取数据 这是我之前使用过的基本代码 void fetchResults NSFetchRequest fetchRequest NSFetchRequest fetchRequestWith
  • existingObjectWithID 与 NPrivateQueueConcurrencyType 发生死锁

    我遇到了冻结 死锁 NSPrivateQueueConcurrencyType并发类型而不是NSMainQueueConcurrencyType 我的上下文初始化 managedObjectContext NSManagedObjectCo
  • iPhone |从头开始构建新版本的核心数据迁移

    我正在开发应用程序更新 这个版本完全是从头开始构建的 并且具有全新的功能coreData模型架构 我需要写coreData从旧模型迁移 我一直在寻找资源来写作coreData迁移但都需要旧模型文件 由于这个版本是全新的 所以我没有旧的模型架
  • UITableView 未更新

    我正在使用核心数据模型和 UITableViewController 表视图 我的模型似乎工作得很好 但是当我向模型添加实体时 我的表视图没有更新 我相信我的模型有效的原因是 当我添加一个实体时 在运行时视图中不会显示任何内容 但是如果我剪
  • 为什么我需要在核心数据项目中使用原始访问器方法?

    为什么我需要在核心数据项目中使用原始访问器方法 我正在阅读有关核心数据的内容并注意以下内容 默认情况下 Core Data 动态地 创建高效的公共和原始的 获取和设置访问器方法 建模属性 属性和 管理对象的关系 课程 例如 给定一个实体 属
  • 使用简洁形式的 NSManagedObjectID URI?

    在我的应用程序中 我使用 Core Data 以及不使用 Core Data 的附加 sqlite 数据库 在这个附加数据库中 我有一些列存储对NSManagedObject实例通过每个实例的NSManagedObjectID 我得到一个实
  • 轻量级核心数据迁移后,如何为现有实体的新属性设置默认值?

    我已经成功完成了核心数据模型的轻量级迁移 我的自定义实体 Vehicle 收到了一个新属性 tirePressure 它是 double 类型的可选属性 默认值为 0 00 当从商店中获取 旧 车辆 在迁移发生之前创建的车辆 时 其 tir
  • 如何按日期正确对从 CoreData 获取的列表进行分组?

    为了简单起见 假设我想创建一个简单的待办事项应用程序 我的 xcdatamodeld 中有一个实体 Todo 其属性id title and date 以及以下 swiftui 视图 如图所示的示例 import SwiftUI struc
  • 更改 NSManagedObject 属性而不触发委托方法?

    有什么方法 或技巧 可以修改NSManagedObject目前由一名代表持有NSFetchedResultsController不触发didChangeObject and controllerWillChangeContent 委托方法
  • 是否可以从 NSFetchedResultsController 获取最新快照

    从 iOS 13 开始 保持UITableView与一个同步NSFetchedResultsController好像是有快照的 每当 ManagedObjectContext 报告添加 删除或更新时 NSFetchedResultsCont
  • 将实体添加到核心数据

    我们有一个使用核心数据的应用程序 在下一个版本中 我想向现有实体添加一个新实体 只需添加新的然后从软件中填充它就可以了吗 还是有什么我必须考虑的事情 迁移有几种类型 最简单的是使用推断映射模型的轻量级迁移 这意味着您只需告诉它进行迁移 软件
  • EXC_BAD_INSTRUCTION 的 CoreData 错误(代码=EXC_I386_INVOP,子代码=0x0)

    当我打开并发调试开关 com apple CoreData ConcurrencyDebug 1 来跟踪 CoreData 的所有并发问题时 在调用 insertingNewObjectForEntityForName 时不断发生崩溃 Xc
  • 删除 Swift 3 中 Core Data 实体中的所有数据

    有没有办法批量删除核心数据中所有实体中存储的所有数据 我在某处读到 在 iOS 9 或 10 中 苹果引入了一种批量删除的方法 但我似乎找不到任何关于它的好信息 最终 我只需要一个遍历实体并删除其中所有数据的函数 看起来它应该很简单 但事实
  • 替换核心数据模型,无需迁移

    我已经相当广泛地改变了我的核心数据模型 关于如何将旧数据迁移到新模型中存在很多问题 但是我不需要迁移任何内容 我只想替换当前的 Core Data 实例 如何才能做到这一点 我假设您正在使用持久存储协调器NSSQLiteStoreType
  • 可以使用两个独立的 SQLite 数据库吗?

    我有一个 sqlite 数据库 其中存储用户定义的信息和用户只读的信息 我觉得将来可能需要修改只读信息 并且我不想进行整个数据迁移 有没有一种方法可以使用单独的 sqlite 数据库来存储只读信息 该数据库可以轻松替换 如果是这样 您能否就

随机推荐