使用 Core Data 的主/详细视图
Posted
技术标签:
【中文标题】使用 Core Data 的主/详细视图【英文标题】:Master / detail view with Core Data 【发布时间】:2014-07-13 07:00:45 【问题描述】:我正在尝试使用存储在 Core Data 中的数据构建主/详细视图。更复杂的是,显示的值不一定是属性的原始值,但可能需要额外的计算。
核心数据实体
交易
金额(始终为正值) fromAccount:资金来源账户 toAccount:钱的目标账户主视图
主视图是一个表格视图,列出了给定帐户的实体交易的所有对象(我们称其为代表帐户)。这需要代表帐户是 fromAccount 或 toAccount 的所有交易。
显示的数据是:
事务日期和消息
等简单属性属性取决于视角:amount 和 account
从fromAccount
的角度看交易:
(amount * -1)
账号:显示toAccount
从toAccount
的角度看交易:
amount
账号:显示fromAccount
这些依赖属性的翻译/解释是由表视图的数据源完成的。视图知道它代表的是哪个 Account,因此数据源可以轻松地进行必要的计算。
详细视图
详细视图显示在主视图中选择的单个事务的值。
表格视图中的选定对象是 NSManagedObject 的后代。理想情况下,我会将文本字段/弹出菜单的值绑定到事务的属性。由于必要的解释,这是不可能的。
现在我正在求助于将值绑定到诸如viewController.selectedObjectAmount
和viewController.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)