Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/105.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 我的代表的代表是。。。(设计模式)_Objective C_Ios - Fatal编程技术网

Objective c 我的代表的代表是。。。(设计模式)

Objective c 我的代表的代表是。。。(设计模式),objective-c,ios,Objective C,Ios,我掌握了iOS的诀窍,并使用了不同的框架。我的项目变得越来越复杂(当然),我想我正在以一种复杂的方式做一些事情 我想知道是否有一种更简单的设计模式来处理这种情况: 应用程序在一个数组中拥有大量属性;还保存表示每个属性的选项的NSDictionary的NSDictionary 属性编辑器:显示显示当前属性的表格,其中包含详细视图的编辑选项 详细视图:显示包含特定属性所有选项的表格 我已经通过以下方式实现了: App->将自身设置为属性编辑器的委托,属性编辑器访问委托(App)的当前属性和属性选项数

我掌握了iOS的诀窍,并使用了不同的框架。我的项目变得越来越复杂(当然),我想我正在以一种复杂的方式做一些事情

我想知道是否有一种更简单的设计模式来处理这种情况:

应用程序在一个数组中拥有大量属性;还保存表示每个属性的选项的NSDictionary的NSDictionary

属性编辑器:显示显示当前属性的表格,其中包含详细视图的编辑选项

详细视图:显示包含特定属性所有选项的表格

我已经通过以下方式实现了:

App->将自身设置为属性编辑器的委托,属性编辑器访问委托(App)的当前属性和属性选项数组

属性编辑器->将自身设置为每个详细视图的代理,并在详细视图上设置属性,表示代理中的适当属性选项数组

详细视图->适当的属性选项数组


这似乎很复杂。将详细视图委托给我的应用程序会更好吗?是否有更清晰的设计模式?我意识到所有这些类之间存在着紧密耦合,但我不认为这是可以避免的。

为什么不创建一个用于访问所有应用程序属性的单例类(我们称之为
PropertiesContainer
)。此类将包含必要的词典,并可由
[PropertiesContainer sharedInstance]
访问


这样,您提到的所有类都不需要与每个类耦合才能访问属性。现在,您将有一个类,可以在任何需要它的地方轻松访问它。(它不需要知道谁使用它)

使用MVC模式,您可以创建一个模型对象来保存整个属性树,并使用它与每个视图或编辑器通信适当的子树


模型对象不一定要创建为单个对象,只需让应用程序创建并保留一个(或根据需要保留多个)。

谢谢。我从来没有使用过
共享状态
——我必须仔细阅读。听起来它在概念上比我现在使用的bizzaro方式更清晰,更易于维护。但我会处于相同的情况,即RootView A必须将它传递(或将其引用自身或将其设置为委托)给PropertyTableView B,后者必须发送它(或将其自身设置为委托)创建PropertyDetailView C,以便C可以访问该特定属性的可用选项列表。这让我回到了
self.delegate.delegate.dictionaryofooptions
——除非我误解了你的意思。如果你不需要在模型之外过滤属性数据库,只需将一个模型对象作为数据源委托即可。