【问题标题】:iPhone MVC app: Where should I put the model?iPhone MVC 应用程序:我应该把模型放在哪里?
【发布时间】:2011-03-22 03:23:59
【问题描述】:

我对 iPhone 开发还很陌生。

我正在构建一个具有多个视图和控制器的应用程序。只有一个模型。

我需要在所有控制器之间共享模型;所以我已经在 App Delegate 头文件中实例化了模型:

@interface MyAppDelegate
(...snip...)
@property (nonatomic, retain) CalcModel *model;

然后据此合成。

在控制器内部,我尝试像这样引用模型:

CalcModel* model = [[[UIApplication sharedApplication] delegate] model];

问题是编译器说'-model' not found in protocol

这可能是因为委托字段返回协议类型,而不是具体的 MyAppDelegate 类型...所以我应该将 [[UIApplication sharedApplication] delegate] 转换为 MyAppDelegate,以便我可以访问模型属性吗?如果有,怎么做?

或者这一切都错了?更广泛地说,您将如何在视图控制器之间共享模型?

非常感谢您的帮助

【问题讨论】:

  • 我不建议将任何与数据相关的东西放入您的 AppDelegate 类中。而是创建一个包含您的 Datamodel 的 Singleton 类,然后您可以从所有视图控制器轻松访问它。

标签: iphone objective-c model-view-controller


【解决方案1】:

是的,只需投射即可。我#define 一个宏,将其包装成一个简单的调用,以使其更容易。

关于实现模型结构的一种方式,本文有一些有用的指针:

http://www.bit-101.com/blog/?p=1969

(我们只是将模型本身实现为单例,并使用视图中的 KVO 来监听属性的变化。)

【讨论】:

    【解决方案2】:

    您可以像对任何其他对象进行类型转换一样对其进行类型转换

    CalcModel* model = (MyAppDelegate *)[[[UIApplication sharedApplication] delegate] model];
    

    你必须在你的 appdelegate .m 中实例化模型

    【讨论】:

      猜你喜欢
      • 2017-04-19
      • 2020-09-30
      • 1970-01-01
      • 2016-08-25
      • 2013-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多