2009-07-23 14 views
1

XMLファイルを解析し、2つの異なるタブバービューでラベルを更新するプログラムを作成したいとします。これらのビューの両方で、結果を更新するための更新ボタンがあります。私がしたいのは、両方のビューから両方のビューラベルを更新することです。私はAppDelegateがおそらくこれを行うための良い選択だと考えていますが、AppDelegateがアクセスできるクラスを作成しようとしましたが、クラスのインスタンスであるため値を含​​んでいません。エラーは表示されませんが、データが変更されてもラベルは更新されません。これはXMLが解析された後に呼び出され、私AppDelegateのメソッドです:ように見えるiPhone:別のクラスのクラスにアクセスする

-(void)callUpdateValues { 
    NSLog(@"Calling Update from AppDelegate"); 
    home *homeController; 
    data *dataController; 
    [homeController updateValues]; 
    [dataController updateValues]; 
    } 

更新方法の一つ:

- (void)updateValues { 
NSLog(@"Call Home"); 
[label1 setText: [[[[totalData objectAtIndex:0] objectForKey:@"nodeChildArray"] objectAtIndex:7] valueForKey:@"nodeContent"]]; 
[label2 setText:[[[[totalData objectAtIndex:0] objectForKey:@"nodeChildArray"] objectAtIndex:1] valueForKey:@"nodeContent"]]; 
} 

だから、ビューは、「callUpdateValues」AppDelegateのメソッドを呼び出し、そのメソッドは各ビューの個々の "updateValues"メソッドを呼び出す必要があります。私はこれに関する専門家ではないので、実際にはiPhoneのプログラミングがどのように機能しているかを知りたいと思っています。私はおそらくここで何かを理解していないだけで、誰かが私に何らかの答えを与えることができたら、私はそれを感謝します。 XML Reading Material

最初のスニペットが場違いです:

答えて

0

は、iPhone上のXMLは、Appleによって行わ取得いくつかの本当に素晴らしいものがあります。あなたが欠けているのは、AppDelegate.h内でインスタンスを作成し、プロパティを使用してそれらを公開し、.mで合成する必要があるということです。次に、あなたは更新構造がより良く適合するはずです。

iPhoneプログラミングを始めるだけの場合は、リンゴが提供するガイドを掘り下げてください。そうでない場合でも、1日に少なくとも5つのサンプルコードプロジェクトをプルダウンしてください。それらの美しさは、(あなたのiPhoneにも)それらを構築することができ、あなたが機能が好きな場合、それはどのように完了したかを見ることができます。あるいは、APRESSからグレープフルーツブックを入手してください。 Beginning iPhone。 これが役に立ったと思います。

0

この例では、homeControllerdataControllerが正しく初期化されていません。プロジェクトを正しく理解している場合は、メインのXIBファイルにhomeControllerおよびdataControllerクラスのインスタンスを作成し、適切なビュー(label1およびlabel2)に接続してください。あなたのAppDelegateは、その後、このようなものになります。かわりにこれにより

... 

@class homeController; 
@class dataController; 

@interface AppDelegate 
{ 
    IBOutlet homeController * home; 
    IBOutlet dataController * data; 
} 

... 

@end 

を、あなたは(あなたのアプリケーションのXIBファイルに)追加し、あなたのhomeControllerdataControllerインスタンスから適切なコンセントへのリンク(homedataをラベル)をアプリケーションデリゲートに追加します。通常、そのクラス名は大文字で指定するサイドノート、ココアコーディング標準に

-(void)callUpdateValues { 
    NSLog(@"Calling Update from AppDelegate"); 
    [home updateValues]; 
    [data updateValues]; 
} 

その後、単にあなたのcallUpdateValues方法で名前によってそれらを参照することができます。これはもちろん、あなたの個人的な趣味にかかっていますが、ココアを始めたばかりの人は、この時点でもう1杯のクール・エイドを飲む価値があるかもしれません。他のほとんどの開発者がやっています。もう一度、あなたに完全に!

1

ココアには、利害関係者に変更を通知するために利用可能ないくつかのクラスがあります。あなたが記述しているように直接メソッドを呼び出すと、必要以上に密接に結合されます。その後、

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(newStuff:) 
              name:@"IGotSomeNewData" object:nil]; 

そして:

[[NSNotificationCenter defaultCenter] postNotificationName:@"IGotSomeNewData" 
                object:newData 
                userInfo:nil]; 

そして、あなたは通知を登録したい更新について聞きたいのクラスで:あなたが持っているだろう更新を生成し、あなたの方法では

何かが起きたときに呼び出されるメソッドを実装してください:

- (void) newStuff: (NSNotification *)notification { 
    id newData = [notification object]; 
    // Do stuff 
} 
+0

私は、十分に、完全に解決してくれてありがとう私が抱えていた大きな問題。ありがとう! – Sam

関連する問題