如何在“详细”实体视图中为“主/父”实体“保存”(核心数据)?
Posted
技术标签:
【中文标题】如何在“详细”实体视图中为“主/父”实体“保存”(核心数据)?【英文标题】:How to "save" (core-data) for "master/parent" entity while in "detail" entity view? 【发布时间】:2014-07-18 14:35:59 【问题描述】:在我的应用中,我有一个如图所示的模型:
一个播放列表可以没有或有多个项目。在主视图中创建播放列表时,它会与默认数据一起存储,并且视图会转到可以添加/删除项目的项目列表 [详细] 视图。这工作正常。
但是,在详细信息(项目列表)视图中,我希望设置一个属性 (targetEndTime),该属性应存储在引用的播放列表对象中。我希望它在详细视图上而不是在我返回主视图时隐式存储。
我如何做到这一点?
如果最好的做法是从两个视图控制器中重构出核心数据,这将如何完成,以及如何保存到特定的对象引用?
非常感谢您的帮助和意见。
更新 TargetEndTime 是一个集合属性,从中计算开始时间。这是一个“倒计时” - 我想知道开始播放列表集的时间,以便它在 targetEndTime 结束。因此,当设置了 targetEndTime 时,我想将其存储在父实体中。
我如何在代码中实现这一点?我正在传递播放列表:
self.playlistViewController = (BXPlaylistViewController *)segue.destinationViewController;
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
Playlist *playlist = nil;
playlist = [self.fetchedResultsController objectAtIndexPath:indexPath];
self.playlistViewController.playlist = playlist;
【问题讨论】:
目标结束时间会根据添加的项目数量(和持续时间)而变化,对吗? 不,它是一个集合属性,从中计算开始时间。这是一个“倒计时” - 我想知道开始播放列表集的时间,以便它在 targetEndTime 结束。因此,当设置了 targetEndTime 时,我想将其存储在父实体中。 从数据模型中可以看出,Item
也与其Playlist
具有反比关系。因此,您可以访问Item
的播放列表并修改其targetEndTime
。
我可以在哪里/如何在代码中实现这一点?我正在传递播放列表:self.playlistViewController = (BXPlaylistViewController *)segue.destinationViewController; NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; Playlist *playlist = nil; playlist = [self.fetchedResultsController objectAtIndexPath:indexPath]; self.playlistViewController.playlist = playlist;
我认为您对 CoreData 的经验并不多。你真的应该从更简单的事情开始。解释你应该如何实现目标超出了我的能力范围。
【参考方案1】:
如 cmets 所述,您可以通过其关系直接访问项目的播放列表。
所以假设您在其详细视图中保留对列表的引用。
例如@property Item *focusedItem
-(void)updateTargetEndTime:(NSTimeInterval)timeInterval
Playlist *playlist = [self.focusedItem valueForKey:@"playlist"];
[playlist setValue:@(timeInterval) forKey:@"targetEndTime"];
这是最原始的版本,但是随着您使用 coredata 进行升级,您将需要使用像 mogenerator 这样的工具或只是 Xcode
为您的托管对象创建 shim 类,这样您就可以像这样表达它。
-(void)updateTargetEndTime:(NSTimeInterval)timeInterval
item.playlist.targetEndTimeValue = timeInterval;
【讨论】:
不需要发电机。 Xcode 也能做到这一点(而且可能更好)。以上是关于如何在“详细”实体视图中为“主/父”实体“保存”(核心数据)?的主要内容,如果未能解决你的问题,请参考以下文章
UICollectionview 在使用 Core Data 保存实体后重新加载数据