UIScrollview 显示由核心数据属性组成的自定义 UIView:设计逻辑?

Posted

技术标签:

【中文标题】UIScrollview 显示由核心数据属性组成的自定义 UIView:设计逻辑?【英文标题】:UIScrollview to display a custom UIView made up of core data attributes: Logic for designing that? 【发布时间】:2011-06-26 14:23:35 【问题描述】:

你能告诉我我的逻辑是否合理吗?因为我对 ios 还是很陌生(大约持续一周),并且非常感谢您的反馈,然后再朝着错误的方向前进。

我有一个带有照片实体的核心数据设置。而我想要做的是在我的 UIScrollView 中创建一个类似“记事卡”的对象。记事卡顶部有一个 UILabel,中间有一个 UIImage,图像下方有两个 UIButton(即按钮将是“发送”或“取消”)。我的目标是让这些像卡片一样的对象像图片一样可滚动,包括翻页器。

在大多数情况下,我认为我已经处理了 ScrollView 和 Page Turner 部分。我只是不清楚创建记事卡对象的最佳方法。

我应该只创建 UIView 的子类,然后以编程方式创建记事卡实例,还是有办法为 UIView 创建 XIB 文件,以便我可以创建从类到视图的 IBOutlets?因为如果后者是可能的,我想这样做,但不知道如何使 XIB 文件接受来自 UIView 对象的插座,而不是 UIViewController。

在自定义 UIView 之外,我仍然不清楚我应该如何从核心数据库中查询这些对象,以便在加载“待定决策”窗口时我有可滚动的对象来做出决定。

在我的 UIScrollViewController 类中,在 viewDidLoad 下,您能否告诉我是否需要使用由 FetchRequests 组成的 For 循环以及随后分配初始化并使用核心数据属性设置我的 UIView 变量的代码?因为我只是不确定这听起来是否正确以及是否有更好的选择。

【问题讨论】:

【参考方案1】:

您可以创建自定义 XIB 和 UIViewController-descendant 类,就像任何其他视图一样,并在您的滚动视图中重用它。这使您不必手动布置子视图,并允许您封装围绕格式化字符串显示的任何逻辑。使用这种方法,自定义记事卡视图可以独立使用,也可以作为其他东西(如滚动视图)的子视图,并为用户提供一致的界面。

您可以将视图中的插座连接到您想要的任何对象 - 如果它不是 UIViewController 派生类,则可以在 XIB 中将其称为代理对象。您将代理的类设置为您的自定义类并像往常一样连接插座。但是,当您创建视图时,它会变得有点不稳定,因为您需要将该自定义类的实例(您在 XIB 中定义的代理)传递给选项字典中的 NSBundle loadNibNamed method。它可以工作,但我通常使用前面提到的解决方案,因为它允许视图独立正常工作而无需任何额外代码。

在这两种解决方案中,我都有一个指定的视图初始化程序,它以实体作为参数,以便视图可以自行设置,以及一个可用于在视图呈现后更改实体的属性(属性的 setter 会导致视图在更改时更新和动画)

无论您采用哪种方式,在当前 SDK (可以说,如果您的应用程序可以等待 5,您的生活会轻松得多。看看 5 中的新功能,您就会知道我指的是什么。

就加载数据而言,如果不了解您的应用程序如何加载信息、一次显示多少条记录等信息,很难推荐最佳方法。一般而言,您应该尽量减少获取请求尽可能,同时不加载比立即显示更多的数据。在我的项目中,我通常:

为每个“视图”创建一个 FetchRequest 将获取请求的 batchSize 设置为屏幕大小的 2.5 倍(对我来说效果很好的任意值) 我总是为我的实体创建custom NSManagedObjects (shameless plug)。它提供了属性名称的自动完成功能,使实体的工作更容易,实际上是 more performant 而不是 getValueForKey:(根据苹果) 如果实体中每个实体都有大量数据,我会尝试使用 setReturnsObjectsAsFaults 来查看延迟加载大量数据是否有助于内存而不是损害性能 如果我只需要每个实体的几个属性,我会重构我的实体,以便在列表视图中有一个包含我需要的属性的“标题”实体,以及一个包含所有数据的“完整”实体(参考到标题中,以方便加载详细视图) 如果我只需要每个实体的一个属性,例如获取约会发生的唯一日期列表以在日历中显示指标,我使用 propertiesToFetch combined with NSDictionaryResultsType 只返回这些值的数组

【讨论】:

谢谢瑞恩。您的反馈非常有帮助。我刚刚回顾了 SDK5 中的新功能,我想我明白你在说什么。我正要观看视频,看看他们是否进一步谈论它。你提到如果我的应用程序可以等到 5 我应该。我认为可以。只是好奇您是否认为我应该立即注册并获得 5 个或等待。不知道5什么时候出来,所以我想我会问。再次感谢:-) 另外,对于 SDK 5 的预期,我现在应该处理我的应用程序的哪些部分?因为我讨厌创建大部分应用程序,而这些更改会使我所做的一切无效。但我也想让它尽可能地发挥作用,这样我就不会只是坐在那里。 最新的 beta 5 相当稳定。我在我所有的设备上运行它,除了一些小故障外,它运行得很好。在不了解您的应用程序的情况下,我不知道我能提供多少帮助,但我会尝试。大多数绘图相关的 API 不会改变,核心数据实体将是相同的(但不是 API),网络也是如此。视图控制器层次结构确实会变得更好。 再次感谢瑞恩!我会尝试获取最新的测试版,这样我就可以让一切顺利进行。我查看了一些来自 WWDC 的视频,是的 - 看起来很棒。

以上是关于UIScrollview 显示由核心数据属性组成的自定义 UIView:设计逻辑?的主要内容,如果未能解决你的问题,请参考以下文章

使用表格视图编辑核心数据中单个属性的正确方法

实现自定义 UIScrollView

ios在两个uiscrollview之间移动触摸事件

使用 fetched 属性的核心数据跨存储查询

当 UIScrollView 内容改变时更新 UITableView

带有核心数据对象的 NSPredicate