问题标签 [cocoa-design-patterns]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3777 浏览

iphone - 一个 UITableView - 多个数据源,最好的设计模式?

这似乎是一个典型的问题,但我有一个 UITableView 对两个单独的数据源具有相同的行为。设计类层次结构以减少重复和 if/else 条件的最佳方法是什么?视图控制器将对两个数据源做同样的事情,它们只是在它们的数据集中是唯一的。我应该让父控制器设置其数据源/相应的标题吗?

当使用 UISegmentControl 显示具有相同界面但数据源不同的两个视图时,同样的问题也很重要。

0 投票
3 回答
19788 浏览

iphone - 如何序列化 iPhone sdk 中的简单对象?

我有一本对象字典;它们都是应该可序列化的 POCO 对象。我应该看什么技术将这些写入磁盘。我正在寻找最简单的选项来编写一些列表来保存状态。

我想我有3个选择。

  1. plist 文件。然而,这似乎仅限于存储预定义的对象(字符串、数字等)而不是对象(如具有姓名和年龄的人)。

  2. 核心数据。(3.0 中的新功能)这会很好用;但是我的数据模型需要更改才能使这项工作。这将是一次大规模的返工,我不确定是否值得付出努力。

  3. SQLLite。实现一个简单的 SQL 数据库来读取和读取。我对此做了最少的研究,但我不想“重写”一些核心数据 ORM 函数。

0 投票
3 回答
3163 浏览

iphone - 使用 Core Data 访问远程数据的模式?

我正在尝试为使用外部数据源的 iPhone 编写核心数据应用程序。我并没有真正使用 Core Data 来持久化我的对象,而是用于对象生命周期管理。我对如何将 Core Data 用于本地数据有一个很好的想法,但是在远程数据方面遇到了一些问题。我将仅使用 Flickr 的 API 作为示例。

首先,如果我需要说最近照片的列表,我需要从外部数据源中获取它们。检索到列表后,我似乎应该为每张照片迭代并创建托管对象。此时,我可以继续编写我的代码并使用标准 Core Data API 来设置获取请求并检索关于狗的照片子集。

但是,如果我想继续并检索用户照片列表怎么办?由于这两个数据集有可能相交,我是否必须对现有数据执行获取请求,更新已经存在的数据,然后插入新对象?

--

在旧模式中,我只需为这些数据集中的每一个设置单独的数据结构并适当地访问它们。一个最近的照片集和一个用户照片集。但是由于 Core Data 的一般模式似乎是使用一个托管对象上下文,因此(我可能错了)我必须将我的数据与主数据池合并。但这似乎只是为了获取照片列表而产生的大量开销。我应该为不同的集合创建一个单独的托管对象上下文吗?是否应该在这里使用 Core Data?

我认为 Core Data 的吸引力在于,在之前(对于 Web 服务)我会请求某些数据,然后在请求中过滤它或在代码中过滤它并生成我将使用的列表。使用 Core Data,我可以获取对象列表,将它们添加到我的池中(根据需要更新旧对象),然后对其进行查询。但是,我可以通过这种方法看到一个问题,如果对象被外部删除,我不知道,因为我保留了旧数据。

我在这里离基地很远吗?人们在处理远程数据和核心数据时是否遵循任何模式?:) 我发现一些人说他们已经做到了,并且对他们有用,但几乎没有例子。谢谢。

0 投票
1 回答
746 浏览

core-data - 核心数据:设计问题。对象包装器与否?

我正在使用 Core Data(用于 iPhone)设计我的第一个项目,并且我遇到了一些可能与我的设计方法相关的问题。

我正在做一个允许用户创建订单的应用程序(比如说餐厅)。我正在使用图形设计器来模拟我的持久性对象(即 OrdeMO)。我将 MO 添加到每个名称的开头以表明它是一个托管对象。我使用 XCode 自动创建托管对象类。

我创建了一些“DAO”类,允许您在托管上下文中搜索或创建新对象。

现在到我的问题。

我想创建一个 OrderMO 对象来存储用户正在创建的订单,但我不希望它成为上下文的一部分,直到用户实际放置它。我尝试使用 [OrderMO alloc] 创建对象,但我得到的对象是“不完整的”,当我尝试设置它的任何属性时,我得到一个错误。

我假设问题是我需要在上下文中创建订单才能使用它。是这样吗?

我考虑了各种选择:

  1. 如果用户放弃订单,则在上下文中创建对象和用户回滚。问题是用户可能会在此过程中保存其他上下文对象(如他的首选项),因此这不起作用。有没有办法在“单独的事务中”创建对象?

  2. 创建一个与 MO 保存相同数据的包装器对象,然后仅在用户下订单时创建 MO。这样做的缺点是我必须保持一个新的班级。

  3. 在 MO 中创建一个属性,例如“放置”,并用于在上下文中过滤我的搜索。这个问题是我最终会在域中得到“垃圾”对象(即未下的订单),我将不得不不时进行一些清理......

我还有其他选择吗?

任何建议表示赞赏。

感谢(阅读这篇长文!)Gonso

0 投票
1 回答
13248 浏览

iphone - Core Data 支持 UITableView 和索引

我正在尝试实现一个支持索引的 Core Data 支持的 UITableView(例如:出现在侧面的字符,以及与它们一起出现的部分标题)。如果没有使用核心数据,我完全没有问题:

我在不使用索引的情况下实现由 Core Data 支持的 UITableView 也没有问题。

我想弄清楚的是如何优雅地将两者结合起来?显然,一旦您索引并重新分段内容,您就不能再使用标准 NSFetchedResultsController 来检索给定索引路径中的内容。因此,我将索引字母存储在 NSArray 中,将索引内容存储在 NSDictionary 中。这一切都可以很好地显示,但是在添加和删除行时我真的很头疼,特别是如何正确实现这些方法:

因为它返回给我的索引路径与核心数据中的索引路径没有相关性。当用户添加一行时,我通过简单地重建我的索引 NSArray 和 NSDictionary 来添加工作,但是当他们删除一个时执行相同操作会使整个应用程序崩溃。

我在这里缺少一个简单的模式/示例来使所有这些正常工作吗?

编辑:澄清一下,我知道 NSFetchedResultsController 是开箱即用的,但我想要的是复制联系人应用程序等功能,其中索引是人名的第一个字母。

0 投票
4 回答
490 浏览

iphone - 将新对象分配给保留属性的最佳实践?

我正在为我的 iPhone 应用程序使用 Core Data。我的属性是使用保留属性设置的。

例如,“事物”实体中的“数字”属性:

在我的代码中使用 Thing 对象时,我一直在设置 number 属性,如下所示:

但是,这会造成内存泄漏(由于 alloc plus 属性保留,新 NSNumber 对象的保留计数比期望的高一)。

由于这是针对 iPhone OS 的,我想自己管理内存,所以我选择不使用自动释放池(这也有更好的性能和更低的最大内存使用量的好处)。

  1. 我知道这种模式有效(并且已经在几个 SO 帖子中讨论过):

    这种模式非常清晰,但我对三行或临时变量并不感到兴奋。

  2. 我认为这也会起作用(但我在任何 SO 帖子上都没有注意到它):

    这种模式不太清楚,但只需要两行并且不使用临时变量。

问题
是否有任何其他模式可以将新对象分配给保留属性(不使用自动释放池)?这里的最佳做法是什么?

0 投票
3 回答
1285 浏览

iphone - 自定义一个数据驱动的 TableView

我有一个分组的表格视图,它在一个部分中填充了 XML 数据。我想做的是在数据驱动的部分之前创建另一个部分,并对其应用操作。

例子:

用户会看到一个按钮,上面写着“使用您当前的位置”(手动创建的部分),下面是用户可以选择的国家列表(数据驱动部分)

使用设置菜单作为指南。有一些选项是一个部分中的单行,所以它们似乎是一个按钮......

如果这没有意义,我会尝试更好地解释它。


所以我有这两行明显的代码......足够简单

我想要numberOfSectionsInTableView返回 2 并让第一个“部分”说“单击以使用您当前的位置”,然后将其推入查看地图,第二部分显示我目前正在工作的国家/地区列表。

0 投票
3 回答
2840 浏览

objective-c - tableView:titleForHeaderInSection:导致崩溃

由于某种原因,该tableView: titleForHeaderInSection:方法导致应用程序崩溃,但没有提供任何详细信息。我知道这是这种方法,因为当我将其注释掉时,表格会加载,但显然没有标题。

0 投票
2 回答
538 浏览

iphone - 在两个 iPhone 子视图之间交换数据

一直在研究如何将数据从一个子视图发送到另一个子视图。该应用程序有几个视图,其中一个是实时设置视图。设置的更改应该会影响其他视图中的内容。

NSUserDefaults似乎很受欢迎,但我不希望持久数据也不希望自动保存到数据库/文件中。看起来可能会放缓,我想避免这种情况。

第二个流行的事情是将一些常见的顶级对象的引用传递给每个子视图。只是还没有找到任何教程,它会详细地告诉我如何做到这一点......很可能很简单,不需要教程 - 在你弄清楚一次之后!如果您能指出正确的方向(URL),将不胜感激!

问题:我正在考虑使用一个“单例对象”来存储“全局数据”,随时随地访问它。这有什么问题?如果我在例如 appDelegate.m 创建它,它应该在任何人尝试访问它之前就存在,对吧?

我正在查看示例代码。

0 投票
4 回答
24281 浏览

iphone - 什么是委托和委托方法

伙计们,请让我知道委托和委托方法之间的区别及其区别和用法???