跨商店与获取属性的关系较弱?

2023-12-05

我想将我的参考数据与核心数据模型中的用户数据分开,以简化我的应用程序的未来更新(并且因为,我计划将数据库存储在云上,并且不需要将参考数据存储在云上,因为这是我的申请的一部分)。因此,我一直在寻找一种使用获取的属性来编码跨商店关系的方法。我还没有找到任何示例实现。

我有一个使用两种配置的核心数据模型:

  • 数据模型配置1:UserData(与用户相关的实体)

  • 数据模型配置 2:ReferenceData(与应用程序本身相关的实体)

我为这两个配置设置了 2 个不同的 SQLite 持久存储。

  • UserData 配置(和存储)包含实体“User”

  • ReferenceData 配置(和存储)包含实体“Type”和“Item”。

我想创建两个单向弱关系,如下所示:

  • “用户”具有唯一的“类型”

  • 一个“用户”有很多“物品”

这是我的问题:

  • 我如何设置我的属性?

  • 每个关系是否需要 2 个属性(一个用于存储唯一 ID,另一个用于访问我获取的结果)?

  • 这种弱关系可以被秩序化吗?

  • 有人能给我一个实现这个的例子吗?

作为马库斯回答的后续:

通过浏览论坛和文档,我了解到我应该使用实体实例的 URI 表示而不是 objectID。这背后的原因是什么?

// Get the URI of my object to reference 
NSURL * uriObjectB [[myObjectB objectID] URIRepresentation];

接下来,我想知道如何将我的对象 B URI (NSURL) 作为弱关系存储在我的父对象 A 中?我应该使用什么属性类型?我该如何转换这个?我听说过存档...?

然后,稍后我应该以相同的方式检索托管对象(通过取消转换/取消存档 URIRepresentation)并从 URI 获取对象

// Get the Object ID from the URI 
NSManagedObjectID* idObjectB = [storeCoordinator managedObjectIDForURIRepresentation:[[myManagedObject objectID] URIRepresentation]];

// Get the Managed Object for the idOjectB ...

最后但并非最不重要的一点是,我是否应该在实体 A 中声明两个属性,一个用于持久化 URI 需求,另一个用于检索直接对象 B?

NSURL * uriObjectB [objectA uriObjectB];

ObjectB * myObjectB = [objectA objectB];

正如您所读到的,我真的很怀念一些实现这些弱关系的简单示例!我真的很感激一些帮助。


到目前为止,拆分数据是正确的答案。参考数据不应与云同步,特别是因为 iCloud 对允许应用程序同步和存储在文档中的数据有软上限。

要创建跨存储的软引用(它们不需要是 SQLite,但对于一般应用程序性能来说这是一个好主意),您将需要有某种可以从另一端引用的唯一密钥;一个好的老式外键。

从那里,您可以在模型中创建一个获取的属性来引用实体。

虽然这种关系不能直接排序,但您可以通过排序索引创建顺序,或者如果它具有逻辑排序,那么您可以在检索数据后对其进行排序(我为此使用方便的方法,返回排序的数组而不是集合)。

我可以举一个例子,但你确实走在正确的道路上。唯一有趣的部分是迁移。当您检测到迁移情况时,您将需要独立迁移每个商店before您建立了核心数据堆栈。这听起来很棘手,但实际上并不难实现。

Example

假设您在用户存储中有一个 UserBar 实体,在参考存储中有一个 RefBar 实体。然后,RefBar 将与 UserBar 建立 fetchedProperty“关系”,从而创建 ToOne 关系。

UserBar
----------
refBarID : NSInteger

RefBar
--------
identifier : NSInteger

然后,您可以在建模器中的 RefBar 实体上创建一个获取的属性,其谓词为:

$FETCHED_PROPERTY.refBarID == 标识符

让我们将该谓词命名为“userBarFetched”

现在将返回一个数组,因此我们想向 RefBar 添加一个便捷方法

@class UserBar;

@interface RefBar : NSManagedObject

- (UserBar*)userBar;

@end

@implementation RefBar

- (UserBar*)userBar
{
    NSArray *fetched = [self valueForKey:@"userBarFetched"];
    return [fetched lastObject];
}

@end

创建 ToMany 是相同的,只是您的便捷方法将返回一个数组,并且您将在返回数组之前对数组进行排序。

As 希思·博德斯提到过,可以add排序到NSFetchedProperty如果你愿意,但你必须用代码来完成。就我个人而言,我一直觉得它很浪费并且不使用该功能。如果我可以在建模器中设置排序,可能会更有用。

使用对象 ID

我不建议使用 ObjectID 或 URIRepresentation。 ObjectID(以及该 ObjectID 的 URIRepresentation)可以并且将会改变。每当您迁移数据库时,该值都会发生变化。创建一个不变的 GUID 会更好。

弱关系

您只需要关系 M 端的一个值来存储外部标识符。在您的对象子类中,您只需要实现检索对象(或多个对象)的访问器。

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

跨商店与获取属性的关系较弱? 的相关文章

  • 通过 iBeacon 监控和测距与 CoreBluetooth scanForPeripheralsWithServices 检测信标

    对于 iOS 对想要扫描 BLE 信标 外设的应用程序施加的限制 存在很多困惑 在阅读了几个博客和 Stack Overflow 答案后 我想看看我是否正确理解了所有问题 如果有什么理解错误或者遗漏的地方请指正 我仅指 iOS 7 及更高版
  • 使用按计数分组的核心数据获取属性

    这是我想为 Core Data 编写的查询的 SQL 版本 SELECT Group Name COUNT Item Name FROM Item INNER JOIN Group ON Item GroupID Group ID GROU
  • UITableView 无法一直滚动到底部[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我只是好奇 我做了一些UITable
  • 停止在 iOS Web 应用程序上滚动屏幕边缘?

    正在开发 iOS 网络应用程序 用户可以上下滚动页面内容 但是 有没有办法阻止屏幕被拖动得太远以致灰色背景变得可见 这可以通过在移动 Safari 中打开任何网页并将页面下拉来复制 您可以使用诸如 Pastrykit 或 iScroll 之
  • Facebook iOS 选择好友表空白

    我正在尝试将 选择的朋友 添加到我的 iOS 应用程序中 我设置了登录视图 登录后 我打开朋友选择器 但它显示为空白 我看到带有 完成 和 取消 按钮的表 但表中没有加载任何朋友 IBAction selectFriendsButtonAc
  • 如何快速从解析中加载图像?

    我想知道是否有人可以帮助我 我是应用程序开发的新手 我正在从我的应用程序上传图像以在解析文档的帮助下毫无问题地进行解析 let imageData UIImagePNGRepresentation scaledImage let image
  • UIView 重写drawRect 导致视图不遵守maskToBounds

    我正在尝试覆盖drawRect 我的自定义视图中的 UIView 方法 但是 我的视图的边界半径定义为 sub NSBundle mainBundle loadNibNamed ProfileView owner self options
  • 如何从 Xib 文件加载自定义 UITableViewCell?

    问题很简单 如何加载自定义UITableViewCell来自 Xib 文件 这样做可以让您使用 Interface Builder 来设计您的单元 由于内存管理问题 答案显然并不简单 这个线程 https stackoverflow com
  • NSString 到 NSDate 的转换得到错误的结果[重复]

    这个问题在这里已经有答案了 可能的重复 NSDateFormatter 的时间错误 https stackoverflow com questions 5466419 wrong time from nsdateformatter NSDa
  • 具有透明背景的 Swift 模态视图控制器 [重复]

    这个问题在这里已经有答案了 我知道这个话题很受欢迎 但我在编程语言中遇到了一些问题 事实是我仍然不明白我把代码放在哪里 好吧 我就来说说整个案子 我正在尝试制作一个与正常情况稍有不同的模态 Swift 通过单击按钮 ViewControll
  • Cordova Phonegap“导出失败”错误代码 70 构建 ios 时

    我目前正在使用 Cordova Phonegap 构建 iOS 应用程序 本来工作正常 但现在运行时出现错误cordova build ios在终端中 我收到以下错误 导出失败 错误 命令的错误代码 70 带有参数的 xcodebuild
  • 如何将数据从一个视图传递到下一个视图?

    我正在制作一个下载排队系统来下载视频 处理下载的排队代码位于另一个视图控制器中 现在我的问题是如何将下载的 URL 传递到另一个视图而不推送到另一个视图控制器 如下所示 ViewConntroller View ViewConntrolle
  • ExpandableLabel iOS 中的“少看”

    我正在使用第三方库可扩展标签 https github com apploft ExpandableLabel实施一个see more特征 我正在寻找仅快速的解决方案 其中包含标签中的文本而不是按钮中的文本 因此这可以完美地工作 添加库并更
  • 尝试注册 RCTBridgeModule 类 RCTFileReaderModule

    尝试为名称 FileReaderModule 注册 RCTBridgeModule 类 RCTFileReaderModule 但该名称已由类 FileReaderModule 注册 尝试使用命令react native run ios在i
  • TableView 中图像的大小不正确

    我正在使用来自 URL 的图像创建一个表视图 但图像不会调整到所有视图的大小 直到我将其按入行中 知道为什么会发生这种情况吗 这是一个自定义的表格视图 我的代码是 UITableViewCell tableView UITableView
  • SwiftUI - 从 NSObject 继承的 ObservableObject 在 iOS 13 中不会更新

    我知道 这是 无法在 iOS XX 中工作 问题之一 但我完全陷入困境 所以我有一个ObservableObject继承自的类NSObject 因为我需要听委托方法UISearchResultsUpdating class SearchBa
  • iOS 键盘显示后分屏宽度

    我刚刚开始研究 Cordova 应用程序对分屏多任务处理的支持 到目前为止 该应用程序在模拟器中的 iPad 上显示和调整大小都很好 但是当我单击编辑字段并显示软件键盘时 100 宽度的值开始返回整个屏幕 而不是给出的窗口 初始显示 到目前
  • 如何像谷歌日历一样将单元格的内容滚动到表格视图中的另一个单元格中?

    我希望用户界面像谷歌日历那样进入桌面视图 它在不同的行中显示相同的日期事件 但是当您向上或向下滚动时 左侧的日期也会向上向下滚动 Can you please help me how to achieve this Please take
  • 在iOS中设置框架的原点

    我正在尝试以编程方式设置框架的原点 Method1 button frame origin y 100 方法二 CGRect frame button frame frame origin y 100 我尝试了方法 1 但它不起作用 显示错
  • 弱变量中间为零

    弱变量什么时候变为零 weak var backgroundNode SKSpriteNode texture SKTexture image initialBackgroundImage backgroundNode position C

随机推荐

  • SSIS API:如何知道将 __COMObject 转换到哪个接口?

    Like 这个帖子 我还尝试从 SSIS 包中提取 SQL 我想我会尝试发布的相同代码 听起来该代码对他有用 但不完整 因为它没有处理所有可能的情况 这是调用过程的代码 var taskHost Microsoft SqlServer Dt
  • PHP fwrite() 期望参数 1 为资源,给定布尔值 [关闭]

    Closed 这个问题需要调试细节 目前不接受答案 我正进入 状态 Warning fwrite expects parameter 1 to be resource boolean given 我有下面给出的代码 data table t
  • c# 从数据库初始化Appsettings

    我们已经有一个现有的控制台应用程序 当前使用基于文件的 AppSettings 所以我的 app config 指向我的实际 appsettings 文件
  • 模型和视图模型的 INotifyPropertyChanged

    我目前离开家 并且还要离开家几周 并且只有一台平板电脑 因此 我无法访问 Visual Studio 来测试我想要学习的内容 MVVM图案 到目前为止 我认为理论已经确定 但我对INotifyPropertyChanged界面 我认为 MV
  • Spring Boot Security hasRole 不起作用

    我无法使用hasRole中的方法 PreAuthorize注解 还request isUserInRole ADMIN gives false 我缺少什么 虽然 hasAuthority ADMIN 工作正常 我正在从数据库为用户分配权限
  • 使用 CSS 或 jQuery 更改每行第一个单词的颜色

    我试图瞄准每行的第一个单词 将颜色更改为仅第一个单词 现在这正在由一个textarea在后端 div class items 67 small businesses has worked with us since the beginnin
  • Google 登录 API 异常 10

    认证已接近最后阶段 但出现问题handleSignInResult方法 它在日志中返回异常代码 10 开发人员错误 谷歌提供了全面的描述 应用程序配置错误 此错误不可恢复 将被视为致命错误 开发商是个白痴 我应该做什么来处理这个问题 获取一
  • 添加实例到weka中的Instances

    我有一些 arff 文件 我想按顺序阅读它们并创建一个大数据集 Instances add Instance inst 不会向实例添加字符串值 因此尝试 setDataset 但即使这样也会失败 有没有一种方法可以实现字符串直观上正确的事情
  • 检查什么 CollectionAssert.AreEquivalent

    我正在阅读有关该方法的内容CollectionAssert AreEquivalent in MSDN 文章根据 MSDN 如果两个集合具有相同数量但任意顺序的相同元素 则这两个集合是等效的 如果元素的值相等 则元素相等 但如果它们引用同一
  • NSString 编码特殊字符,如 !@#$%^&

    我如何编码我的 NSString 以便所有特殊字符例如 变成 amp 和 变成 apos 我不确定编码是否是正确的词 所以如果我错了 请纠正我 Thanks 你所说的叫做HTML 实体 有一个类别声称可以解决这个问题 NS字符串 HTML
  • 索引集合的(无序)对

    这是一个自动回答的问题 源自这个更具体的问题OP 在选择错误的 恕我直言 答案后似乎失去了兴趣 我确实检查了之前有关该主题的问题 但似乎没有一个能够解决该问题 那有什么用呢 假设您有 4 个人 Abdul Beatrix Charlie 和
  • Python 中的 is 关键字[重复]

    这个问题在这里已经有答案了 当我阅读 学习Python 时 我对使用is操作员 本书试图将其解释为对相同内存地址的测试 A is B if True 意味着 A 和 B 位于相同的内存地址中 但在下面的情况下 这个解释似乎不成立 谁能帮我理
  • 需要在composer-rest-server中将localhost:3000替换为realip:3000

    我已经在AWS机器上上传了composer rest server 我成功地启动了composer rest server 没有错误 尽管它总是引用http 本地主机 3000 我想将我的 localhost 更改为我在 AWS 上的实际主
  • 如何从 STL 容器中删除元素?

    如何从 STL 容器中删除具有指定的元素value 或者满足一些状况 对于不同类型的容器是否有一个通用或统一的方法 不幸的是 没有一个uniform用于从 STL 容器中删除元素的接口或模式 但出现了三种行为 std 向量模式 从a中删除满
  • Glassfish 服务器上的自动 EJB 计时器未触发

    因此 我在 Glassfish 3 1 上运行 Java EAR 应用程序 我在 EJB 模块中创建了一个带有单个带注释的计时器函数的无状态会话 bean 我没有确切的代码 但它看起来像这样 Stateless public class S
  • jquery cfml 触发器('更改')不起作用

    我需要的是一个绑定到列出文件类型的查询的 cfselect 一个列出已保存文件的 cfdiv 以及一个扫描要保存为 pdf 文件的图像的按钮 其名称以输入字段的值为前缀 简单的页面
  • 如何从多个文件中删除前缀?

    我下载了很多视频 名称如下 site com filename mp4我想删除前缀 以便它们被命名为filename mp4 我尝试使用以下代码创建批处理文件 ren site com mp4 mp4 但结果却是 com filename
  • 从 Pandas 列中分解字典

    我有以下 df movie id rating all 0 tt7653254 age all avg rating 8 1 count 109326 age lt 18 avg rating 8 8 count 318 age 18 29
  • 查询期间失去与 MySQL 服务器的连接? [复制]

    这个问题在这里已经有答案了 可能的重复 查询期间失去与 MySQL 服务器的连接 我正在将一些数据从大型 csv 导入到 mysql 表 在将文件导入表的过程中 我失去了与服务器的连接 出了什么问题 错误代码为2013 查询期间丢失与myS
  • 跨商店与获取属性的关系较弱?

    我想将我的参考数据与核心数据模型中的用户数据分开 以简化我的应用程序的未来更新 并且因为 我计划将数据库存储在云上 并且不需要将参考数据存储在云上 因为这是我的申请的一部分 因此 我一直在寻找一种使用获取的属性来编码跨商店关系的方法 我还没