2011-12-21 6 views
0

私はint "healthInt"から2を減算するという方法があります。その後、私は単に "healthInt"を表示する "healthString"と呼ばれるNSStringを持っています。だから私はこのメソッド "take2Damage"でやってみたいのは、 "healthInt"から2を引いたものです。 「healthLabel」というUILabelをhealthStringに設定します。問題は、healthLabelが別のクラスに配置されていることです。ここにいくつかのコードがあります。以前の質問:Appellegateから別のクラスのUILabelにアクセスする

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; 

最後の人は私が何を意味していたか分からなかったので、私は明確にしたいと思った。他のクラスからUILabelにアクセスするためにtake2Damageに入れることができるコードが必要です。それが可能でない場合、私は別のファイルからのhealthInt変数にアクセスするコードを希望します。うまくいけば、これは感謝します。

答えて

1

まず、別のクラスのIBOutletを変更しないでください。これは、IBOutletがUIViewControllerによってどのように管理されているかにより、非常にエラーが発生しやすいです。

次に、基本的な問題はMVCパターン(モデルビューコントローラ)に従わないことです。 「健康」のようなものは、「プレーヤー」クラスなどのモデルオブジェクトに格納する必要があります。 AppDelegateはダメージを受けません。プレイヤーはダメージを受ける。ビューに現在の値player.healthが表示されます。

MVCの概要を知りたい場合は、Cocoa Core Competenciesのドキュメントを参照してください(リンク先は必ず守ってください)。 MVCはCocoa開発の中心です。遠すぎる前に理解していることを確認してください。また

便利:Organizing iOS project for MVC design pattern

そして、うまく設計されたMVCアプリ示すいくつかの良い例コード:The Elementsを。

上記を読んだ後で、おそらくさらなる質問がありますが、まずはCocoaの基本アーキテクチャを読んでください。そして、オブジェクトがどうやって相互作用するのかがより明確になるはずです。

+0

答えた「最後の人」として私は2番目のRobの提案をしますが、ポスターがオブジェクト指向設計に精通していないと思われます。また、AppDelegateに保存したグローバル変数にアクセスするには、 '(MyAppDelegate *)[[[UIApplication sharedApplication] delegate] healthString] 'を呼び出します。変数にアクセスしているクラスからこれを使用します。それははるかに明確になることはできません。しかし、あなたが何かを学びたいなら、私はRobのアドバイスを受けて、CCCとMVCのドキュメントを調べます。 –

関連する問題