问题标签 [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 投票
2 回答
284 浏览

php - 在 PHP 中实现观察者模式是否值得?

我一直打算在 PHP 中使用设计模式,例如观察者模式,但是每次加载页面时我都必须重新创建观察者的关系让我很痛苦。由于引用在会话中保存为新的具体对象,因此无法保留订阅者与其观察者之间的关系,除非您使用 GUID 或其他一些属性来形成查找并存储该属性。

与每次加载页面时重新创建关系的成本相比,与干净的设计相比,使用 PHP 中的观察者等设计模式是否值得?有什么真实的经验可以分享吗?

0 投票
1 回答
469 浏览

iphone - 什么时候释放对应UIViewController的model(representedObject)

在 AppKit 中,我们可以通过 获得“representedObject” NSViewController,此表示对象通常设置为 ModelController 或NSViewController 显示的模型,这与绑定非常有用,因为您只需设置新的表示对象并且模型详细信息在视图中更新,但在 iPhone 的情况下(UIKit,没有可用的 Cocoa 绑定),没有这样的代表对象,UIViewController所以这里有几件事我有兴趣知道:-

  1. 将模型绑定到 UIViewController 的最佳/推荐方式是什么?最好不要维护大量IBOutlets并调用 setter 来更新更改后的模型数据以在视图中显示。
  2. UIViewController 的相关模型应该如何/何时发布?
  3. 何时-[UIViewController dealloc]调用,在典型的 iPhone 应用程序中。

我正在寻找构建一些类,以便UIViewController视图和模型之间的坐标,但同时,在不需要时释放模型。

TIA。

0 投票
3 回答
1288 浏览

objective-c - 在自定义视图上显示 NSString

我有一个具有NSTextField,NSButtonNSView. 当我在 中输入NSTextfield内容并按下按钮时,我希望将文本绘制在NSView. 到目前为止,除了视图之外,我的所有东西都已连接并正常工作。

如何连接文本和视图,以便每次按下按钮时,都会将文本绘制到视图中?

0 投票
2 回答
996 浏览

iphone - 跨多个 UIViewController 重用 nib

UITableViewCells在 nib 文件中创建了一些自定义,并希望在多个UIViewControllers.

谁能告诉我做到这一点的最佳做法?我在加载 nib 方面的有限知识似乎表明您必须在 Interface Builder 中指定一个所有者类。

谢谢。

0 投票
2 回答
396 浏览

iphone - 在 iPhone 上使用模态视图控制器编辑属性时应该使用哪种模式?

我正在寻找一种通过 iPhone 上的模式视图执行基本属性编辑的良好模式。

假设我正在组合一个像联系人应用程序一样工作的应用程序。“详细”视图控制器在 UITableView 中显示联系人的所有属性。当 UITableView 进入编辑模式时,单元格中会显示一个显示图标。单击单元格会导致模式“编辑器”视图控制器显示允许用户修改所选属性的视图。此视图通常只包含一个文本框或选择器。用户单击取消/保存,“编辑器”视图被关闭,“详细”视图被更新。

在这种情况下,哪个视图负责更新模型?

“编辑器”视图可以使用键值编码直接更新属性。这出现在 CoreDataBooks 示例中。这在某种程度上对我来说是有意义的,因为它将属性视为编辑器视图控制器的模型。

但是,这不是 View Controller Programming Guide 建议的模式。它建议“编辑器”视图控制器应该定义“细节”控制器采用的协议。当用户指示他们完成了编辑时,“详细”视图控制器将使用输入的值回调,并关闭“编辑器”视图。使用这种方法,“细节”控制器会更新模型。如果您对多个属性使用相同的“编辑器”视图,这种方法似乎有问题,因为只有一个回调方法。

希望得到一些关于哪种方法最有效的反馈。

0 投票
1 回答
448 浏览

objective-c - NSTableView 中的条件列值?

我有一个通过 NSArrayController 绑定到 NSMutableArray 的 NSTableView。数组中的内容是派生类;表的前几列绑定到基类中存在的属性。这一切都很好。

我遇到问题的地方是只有当行映射到一个特定的子类时才应该填充的列。该列要显示的属性仅存在于该子类中,因为它对基类没有任何意义。用户将从前两列中知道为什么第三列的单元格被填充/可编辑。

第三列的值的绑定在排列对象上,模型路径类似于“foo.name”,其中 foo 是子类的属性。但是,这不起作用,因为层次结构中的其他子类不符合 foo 的键值。

似乎我唯一的选择是让 foo 成为基类上的一个属性,以便每个人都响应它,但这会使模型对象的接口变得混乱。

有没有人为这种情况想出一个干净的设计?这并不少见(我是 Cocoa 的新手,我只是在学习绑定的来龙去脉。)

0 投票
1 回答
254 浏览

cocoa - Cocoa 中的 MVC 设计 - 所有 3 都总是必要的吗?另外:命名约定,放置控制器的位置

尽管我在网上阅读了很多论文和信息,但我还是 MVC 的新手。我知道这有点模棱两可,对 MVC 模式有很多不同的解释。但差异似乎有点小

我的主要问题是 - 是否总是需要 M、V 和 C 才能正确执行此操作?我没有看到任何人在我读过的任何东西中解决这个问题。示例(我在 Cocoa/Obj-c 中工作,尽管这无关紧要)..

1) 如果我的 GUI 上有一个简单的图像,或者只是为了用户方便而没有保存或修改的文本输入字段,那么这两个都是 V(视图)但没有 M(没有数据也没有域处理正在进行),并且没有 C 来桥接它们。所以我只有一些方面是“V” - 看起来不错

2)我有 2 个不同且可见的窗口,每个窗口上都有一个标记为“ACTIVATE FOO”的按钮 - 当用户单击任一按钮时,两个按钮都按下并更改为“DEACTIVATE FOO”,并出现第三个窗口标签“FOO”。再次单击该按钮会将两个窗口上的按钮更改为“ACTIVATE FOO”,并将删除第三个“FOO”窗口。在这种情况下,我的 V 由两个窗口上的按钮组成,我猜也是第三个窗口(可能所有 3 个窗口)。我肯定有一个 C,我的 Controller 对象将知道这些按钮和窗口,并将获得它们的点击并保持有关窗口和按钮的通用状态。但是,无论我有 1 个按钮还是 10 个按钮,我的窗口被称为“FOO”或我的窗口被称为“BAR”,这无关紧要。这里没有领域知识或数据——只是对视图的控制。所以在这个例子中,我真的有“V”和“C”,但没有“M”——可以吗?

3)最后一个例子,我跑得最多。我有一个文本输入字段作为我的视图。当我在其中输入文本时,比如说一个代表重力的数字,我将它保存在一个模型中,该模型可能会在考虑我的重力参数的同时执行诸如计算球的物理等事情。这里我有一个 V 和一个 M,但我不明白为什么我需要添加一个 C - 控制器只会接受来自视图的信号并将其传递给模型,反之亦然。因为 C 只是一个纯粹的传递,它真的是“垃圾”代码,在我看来并没有让事情变得更加可重用。在大多数情况下,当某些事情发生变化时,我需要以几乎相同的方式更改 C 和 M。我意识到认为大多数情况只需要 V 和 M.. 引导我进入下一个主题可能是 MVC 初学者的错误

4) 在 Cocoa / Xcode / IB 中,我猜我的 Controller 应该始终是 IB 中的实例化对象?也就是说,我在 IB 中放置了所有“V”组件,并且对于每个 View 对象(相关的事物)集合,我应该有一个实例化的 Controller?然后也许我的模型不应该在 IB 中找到,而只能作为 Xcode 中的类找到,这些类与在那里找到的控制器代码相关联。这是准确的吗?这可以解释为什么你会有一个没有真正增加价值的控制器 - 因为你保持一致..

5)如何命名这些东西 - 对于我上面关于 FOO / BAR 的示例,可能以 Controller 结尾的东西是 C,如 FancyWindowOpeningController 等?对于模型 - 我应该给它们加上 GravityBallPhysicsModel 等后缀,还是应该只命名我喜欢的那些?我没有看到足够多的代码来知道野外有什么,我想尽早走上正确的轨道

提前感谢您让我直截了当或让我知道我走在正确的轨道上。我觉得我开始明白了,我在这里所说的大部分内容都是有道理的,但验证我的猜测会帮助我感到自信。

0 投票
1 回答
1756 浏览

iphone - 核心数据、KVO 和 NSInternalInconsistencyException

我正在使用 Core Data 和 KVO 来查找值的更改以触发保存到数据存储。我有一个与搜索挂钩的表格视图NSFetchedResultsController。当搜索发生变化时,会在按下 Search 按钮时创建一个新的结果控制器。当用户在结果表视图中选择项目时,用户会进入详细视图并可以进行编辑。

这就是我遇到问题的地方。当用户在我所做的单独 UIControl 中进行更改时,会通知详细视图并且可以使用NSFetchedResultsController它从表格视图将我推送到视图堆栈时记住的信息来获取NSManagedObjectContext并进行保存。当我这样做时,有时会收到以下错误:

我发现当我进行搜索并且不在表格顶部的对象被移动到顶部时,往往会发生这种情况。我隐约知道我的脑后可能出了什么问题,但希望能提供有关如何解决此问题的任何指示。

0 投票
1 回答
222 浏览

iphone - 编写混合 iPhone 应用程序的最佳方式是什么?

我正在开发一个 iPhone 应用程序,它将从服务器访问 XML 文件(或类似文件)。我想将这些数据转换为 iPhone 上的一个流畅的原生 UI。以我目前的知识,我已经可以通过加载文件、解析它们、编写自定义代码来填充数据结构并将数据转换为用户界面元素来做到这一点。但是,由于我知道这是 iPhone 开发中的常见问题,我倾向于认为有一种更简单的方法可以抽象出一些过程。

在不重新发明轮子的情况下编写混合应用程序的最佳和最合适的方法是什么?

0 投票
3 回答
951 浏览

objective-c - 继承的@property 能否满足@财产?

我有一个协议:

还有一个“抽象”基类,具有以下实现(作为吸气剂,未显示)-(UIView *)view

但是当我Gadget在 的子类中实现协议时AbstractGadget,如下所示:

我收到一个编译器错误,告诉我“警告:属性 'view' 需要定义方法 '-view'。” 我可以使用@dynamic或添加存根方法来解决这个问题:

但我只是想知道我是否正在做一些不受支持的事情,我不应该做的事情,或者它是否只是编译器中的一个限制/错误?