Cocoa touch 模型与视图控制器通信的建议方式是什么?
例如,我有一个模型类,用于处理从其他iPhone接收蓝牙消息。当我收到其中一条消息时,我需要更新视图。我相信标准的方法是通过视图控制器。视图控制器具有对模型和视图的引用,因此可以与每个模型和视图进行通信 但是,他们应该如何将消息发送回VC?它们可以分别引用视图控制器(作为属性,使用assign not retain)。这是一种糟糕的做法吗(如果我没有弄错的话,那是循环引用)?Cocoa touch 模型与视图控制器通信的建议方式是什么?,cocoa-touch,ios,model-view-controller,loose-coupling,Cocoa Touch,Ios,Model View Controller,Loose Coupling,例如,我有一个模型类,用于处理从其他iPhone接收蓝牙消息。当我收到其中一条消息时,我需要更新视图。我相信标准的方法是通过视图控制器。视图控制器具有对模型和视图的引用,因此可以与每个模型和视图进行通信 但是,他们应该如何将消息发送回VC?它们可以分别引用视图控制器(作为属性,使用assign not retain)。这是一种糟糕的做法吗(如果我没有弄错的话,那是循环引用)? 是否有其他方法可以做到这一点?我考虑过委托模式,但是对于一个简单的问题来说,编写一个完整的委托和所有的工作似乎是相当多的
是否有其他方法可以做到这一点?我考虑过委托模式,但是对于一个简单的问题来说,编写一个完整的委托和所有的工作似乎是相当多的工作。 或者,如果你认为我想得太多,请告诉我 [我认为这个问题以前可能出现过,它似乎很常见,但我搜索了一些,没有找到多少]
感谢您的帮助,在iOS应用程序中从来没有这样做过,但在一般的mvc术语中,有时直接从模型更新视图更有意义(并保持代码更干净)。在我看来,这很好,但它将模型与视图结合起来,这是不好的。因此,要解决这个问题,您应该实现一个观察者(广播接收)设计模式(或者使用内置的ios事件广播/接收系统->NSNotificationCenter)。这样,当发生改变模型的事件时,模型将播放偶数,无论是否有人收听该事件,这不再是它的问题,因此,您将视图与模型分离。通常,您有3种不同的技术:
因此,在您的情况下,委派或KVO可能是最佳选择。您可以将委派添加到模型中,并使其指向VC。您也可以使用本地通知中心发布通知,然后使用VC收听这些通知。我将研究使用NSNotificationCenter,谢谢。你的意思是创建我自己的,而不是使用默认的(由singleton方法defaultCenter返回)?不,只使用默认的notificationcenter-它是用来:)谢谢。我想我会用这个主意。然而,我可能只是直接从视图中听到这些消息,或者在特定场景中听到任何有意义的消息。(类似于mindnoise的回答)哇,谢谢你提供的信息。老实说,我从未听说过KVO,但现在我将进一步了解它;这可能正是我需要的!非常感谢。