2010-12-16 17 views
0

iPadとiPhoneのUniversalアプリケーションで作業しています。共有アプリデリゲート、iPadアプリデリゲート(共有をサブクラス化する)、iPhoneアプリデリゲート(共有をサブクラス化する) - すべてがXCodeのテンプレートに基づいています。このアプリケーションには、ナビゲーション用の共有ビューコントローラもあります。 iPadでは、SplitViewControllerのマスタービューコントローラとして使用されています。 iPhoneアプリでは、UINavigationControllerのルートビューコントローラとして表示されます。ユニバーサルアプリケーションのiPhone側でNSNotificationCenterが動作しません

私の共有アプリケーションデリゲートでは、自分のWebサーバーからアプリを設定するためにJSONを取得しています。そのデータの解析が完了したら、NSNotificationCenter(defaultCenter)に通知します。

[[NSNotificationCenter defaultCenter] postNotificationName:kDataReady object:nil]; 

共有ビューコントローラは、この通知のオブザーバです。

[[NSNotificationCenter defaultCenter] addObserver:self 
      selector:@selector(onDataReady:) 
      name:kDataReady 
       object:nil]; 

iPadでアプリを実行すると、共有ビューコントローラがこの通知を受け取り、セレクタを適切に呼び出しています。 iPhoneで動かすと、そうではありません。 iPhoneとiPadの間の共通のクラスは同じ順序でインスタンス化され、コンソールログによってこれを確認できます。私はこれが期待どおりに機能しない理由についての手がかりを持っていません。助けて!

答えて

1

iPhoneでaddObserverメソッドが確実に呼び出されていますか?サブクラス化されているという理由だけで、必要なスーパーコールが適切に配置されているわけではありません。

+0

addObserverメソッドは共有アプリケーションデリゲートで呼び出されません。共有アプリデリゲートが通知をポストします。 iPadとiPhoneの両方に共通のビューコントローラは、そのメソッドにオブザーバを追加しています。両方のデバイスで同じinitメソッドが呼び出されますが、iPadのみが動作します。 –

+0

あなたはaddObserverが実際に実行されたことを(デバッガなどで)確認していますか?また、Constantは完全に同じになるように十分上流に定義されていますか? – LordT

+0

ああ、最後の1つのポイントは:onDataReady:(id)送信者は実際にiPhone Viewcontrollerで定義されていますか?より良いヘルプを提供するには、これらのクラスの.hファイルを持つことが良いでしょう。 – LordT

関連する問題