你能告诉我我的逻辑是否正确吗?因为我对iOS还是很陌生(大约一周),并且在返回错误的方向之前,非常感谢您的反馈。

我使用照片实体设置了核心数据。我想做的是在UIScrollView中创建一个类似于对象的“便签纸”。便签卡的顶部将有一个UILabel,中间是一个UIImage,图像下面是两个UIButton(即按钮将为``发送''或``取消'')。我的目标是使这些便条纸之类的对象能够像图片一样滚动,包括翻页器。

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

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

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

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

最佳答案

您可以像其他任何视图一样创建自定义的XIB和UIViewController-descendant类,然后在滚动视图中重用它。这样可以避免您手动布置子视图,并使您可以封装要显示的格式化字符串周围的所有逻辑。使用这种方法,自定义便签卡视图可以独立运行,也可以作为其他视图(如滚动视图)的子视图使用,并为用户提供一致的界面。

您可以将View中的插座连接到所需的任何对象-如果它不是UIViewController派生的类,则可以在XIB中将其称为代理对象。您可以将代理的类别设置为自定义类别,然后照常连接插座。但是,当您创建视图时,它会有点不灵通,因为您需要将该自定义类的实例(在XIB中定义的Proxy)传递给options字典中的NSBundle loadNibNamed method。它可以工作,但是我通常使用前面提到的解决方案,因为它允许视图独立地正确工作,而无需任何其他代码。

在这两种解决方案中,我都为视图指定了一个初始化程序,该初始化程序将Entity作为参数,以便视图可以自行设置,还提供了一个属性,该属性可在视图渲染后用于更改实体(属性会导致视图在更改时进行更新和设置动画)

无论采用哪种路径,在当前SDK(
就加载数据而言,很难在不了解应用程序如何加载信息,一次显示多少记录等信息的情况下推荐最好的方法。通常,您应该尽可能少地获取请求,而不会加载比立即显示更多的数据。在我的项目中,我通常:


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

08-03 14:13
查看更多