プログラムの構造について詳しく知りませんが、これを達成する正しい方法を知ることは難しいです。
考えられるアプローチはいくつかありますが、viewDidLoadは一度だけ呼び出されるため、この種の繰り返しロジックではなく、ビューの初期設定に使用する必要があります。あなたはおそらくスコアを保持するモデルオブジェクトをどこかに持っています。 (そうでない場合、つまり、ScoreがViewControllerのインスタンス変数である場合、スニペットが暗示しているように、独自のモデルオブジェクトに移動する必要があります)。これについては、ViewControllerが "監視するKey-Value Observingを使用してスコアを保持するモデルオブジェクトです。ここでは、それを達成かもしれない方法は次のとおりです。
は、あなたが(、ここでの唯一の現在のスコアを)あなたのゲームセッションデータを保持するために、次のモデルオブジェクトがあるとしましょう:
@interface GameSession : NSObject
@property (readwrite) double score;
@end
...とそれに対応する実装.. 。
@implementation GameSession
@synthesize score;
@end
そして、あなたはこのような何かに見えるのViewController宣言を持っていると仮定すると:
@class GameSession;
@interface MyViewController : UIViewController
{
GameSession *game;
IBOutlet UIImageView *padlock;
}
@end
あなたはモデルオブジェクトのスコア値が変更されるたびに、のViewControllerが自動的に南京錠の画像ビューの隠された状態に更新するような、のViewControllerで次のメソッドを設定することができます。aについて
- (void)viewDidLoad
{
[super viewDidLoad];
game = [[GameSession alloc] init];
[game addObserver:self forKeyPath:@"score" options:NSKeyValueObservingOptionInitial context: [RootViewController class]];
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if (context == [RootViewController class])
{
if ([keyPath isEqualToString: @"score"])
{
NSNumber* newValue = [change objectForKey: NSKeyValueChangeNewKey];
double currentScore = [newValue doubleValue];
[padlock setHidden: (currentScore < 4.)];
}
}
else
{
[super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
}
}
- (void)dealloc
{
[game removeObserver:self forKeyPath:@"score"];
[game release];
game = nil;
[super dealloc];
}
をKey-Value Observingの詳細な説明は、このWebページをご覧ください。http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/KeyValueObserving/
これがはっきりしない場合は教えてください。
ええ、私はその方法を見ていましたが、より簡単な選択肢は、レベル2のボタンにコードを追加することでした。おそらく最高のコーディング練習ではないかもしれませんが、私の割り当てはすぐに予定されており、最も速いオプションを選択しなければなりませんでした。でもありがとう! –