使用 Core Data 的主/详细视图

Posted

技术标签:

【中文标题】使用 Core Data 的主/详细视图【英文标题】:Master / detail view with Core Data 【发布时间】:2014-07-13 07:00:45 【问题描述】:

我正在尝试使用存储在 Core Data 中的数据构建主/详细视图。更复杂的是,显示的值不一定是属性的原始值,但可能需要额外的计算。

核心数据实体

交易

金额(始终为正值) fromAccount:资金来源账户 toAccount:钱的目标账户

主视图

主视图是一个表格视图,列出了给定帐户的实体交易的所有对象(我们称其为代表帐户)。这需要代表帐户是 fromAccounttoAccount 的所有交易。

显示的数据是:

事务日期消息

等简单属性

属性取决于视角:amountaccount

fromAccount的角度看交易:

金额:表示减去的金额,显示为(amount * -1) 账号:显示toAccount

toAccount的角度看交易:

金额:表示添加的金额,显示为正值amount 账号:显示fromAccount

这些依赖属性的翻译/解释是由表视图的数据源完成的。视图知道它代表的是哪个 Account,因此数据源可以轻松地进行必要的计算。

详细视图

详细视图显示在主视图中选择的单个事务的值。

表格视图中的选定对象是 NSManagedObject 的后代。理想情况下,我会将文本字段/弹出菜单的值绑定到事务的属性。由于必要的解释,这是不可能的。

现在我正在求助于将值绑定到诸如viewController.selectedObjectAmountviewController.selectedObjectAccount 之类的方法,它们会进行计算。然而,这似乎是一个糟糕的解决方案。要么我为我想在详细视图中使用的每个属性添加一个方法,要么我在 viewController 中混合使用方法和直接来自所选对象本身的属性。

我最初的想法是使用“TransactionProxy”(NSProxy 的后代),它具有我想要显示的所有必需属性的属性/方法。由于无法开始工作,我放弃了它,但我仍然想知道它是否是 / 选项。

【问题讨论】:

只是数百万“将数据/对象/数组传递给视图控制器”问题的变体。谁要选择重复项? 【参考方案1】:

只需为详细视图提供Transaction 类型的属性,并使用来自该对象的数据填充视图。这是一种非常常见的模式。

【讨论】:

我认为我没有完全理解它。如果我这样做,我是否还必须绑定到 Transaction.amount,保留问题? “绑定”是什么意思?只需访问或更改transaction.amount。只需将transaction.fromAccount.name 放入标签中即可。有什么好困惑的? 我想将 IB 中的文本字段等绑定到我的属性。困难在于我不能只绑定到amount,而是需要进行计算(使用金额或(金额* -1)。帐户也是如此。我需要显示@ 987654325@ 或 toAccount,这在我的表中很容易解决,使用它的数据源,但是当涉及到带有一堆字段的简单详细视图时,我不知所措。 您将表示您在 IB 中创建的 UI 元素(例如标签)的控制器类的“属性”与表示的托管对象的“属性”混淆了数据

以上是关于使用 Core Data 的主/详细视图的主要内容,如果未能解决你的问题,请参考以下文章

NSFetchedResultsController(Core Data)不提供正确的数据源表视图控制器

如何使用更新的数据刷新 NSManagedObject - Core Data

使用 Core Data 的选项卡式应用程序,每个选项卡上都有不同的主从表视图

Core Data iCloud 获取有时不会产生数据(iOS)

UICollectionview 在使用 Core Data 保存实体后重新加载数据

如何将参数传递给 Core Data 生命周期方法?