之前的问题:从Appdelegate访问另一个类中的UILabel

时间:2011-12-21 03:20:34

标签: iphone delegates

我有一个从int“healthInt”中减去2的方法。然后我有一个名为“healthString”的NSString,它只显示“healthInt”。所以我想在这个方法“take2Damage”中做的是从“healthInt”中减去2。然后将一个名为“healthLabel”的UILabel设置为healthString。问题是healthLabel位于另一个类中。这是一些代码。

Appdelegate.m

-(void)take2Damage{
healthInt = healthInt - 2;

}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:        (NSDictionary *)launchOptions
{
healthInt = 100;
healthString = [[NSString alloc]initWithFormat:@"%d", healthInt];

LevelOneViewController.m

IBOutlet UILabel * healthLabel;

由于最后一个人不知道我的意思,我想我会澄清。我想要我可以放在take2Damage中的代码来从另一个类访问UILabel。如果那是不可能的,那么我希望代码从另一个文件访问healthInt变量。希望这将有效。谢谢。

1 个答案:

答案 0 :(得分:1)

首先,不要修改另一个类的IBOutlets。由于UIViewController管理IBOutlet的方式,这非常容易出错。

接下来,您的基本问题是您没有遵循MVC模式(模型 - 视图 - 控制器)。像“健康”这样的东西应该存储在模型对象中,例如“Player”类。 AppDelegate不会受到伤害。玩家受到伤害。然后视图显示player.health的当前值。

要了解MVC,请参阅Cocoa Core Competencies文档(请务必按照链接进行操作)。 MVC是Cocoa开发的核心。在走得太远之前一定要了解它。

也很有用:Organizing iOS project for MVC design pattern

一些很好的示例代码展示了精心设计的MVC应用:The Elements

阅读上述内容后,您可能会有更多问题,但请先阅读Cocoa的基本架构。然后应该更清楚对象如何相互作用。