1

私のアプリケーションでは、appDelegateファイルで、ファープッシュ通知を登録してトークンを取得し、デバイスのUDIDも取得します。これらの変数をグローバル変数として保存します。

次に行うことは、viewControllerでこれら2つの変数を使用してURLに接続することです。

ただし、viewControllerから変数を呼び出すと、それらは(null)になります。

だから私は多分私は彼らに何か悪いことをしていると思った。しかし、appdelegate()とviewcontroller()で何かをnslogしても、最初にviewcontrollerからnslogします...

これはどのように可能ですか?私が新しいのは、appdelegateが最初に実行され、次に、ビューコントローラーでappdelegateで取得したトークンとudid変数をどのように使用できるかです。

私のコードは次のようになります:

@interfaceappdelegate.hの:の直前

extern NSString *newDeviceToken;
extern NSString *udid;

appdelegate.mの前に@implementation

NSString *newDeviceToken;
NSString *udid;

ビューコントローラでは、デリゲートをインポートするだけです。

#import "AppDelegate.h"
4

2 に答える 2

1

デリゲートメソッド:

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken

変数を取得する必要がある場所は、非同期で実行されます。はい、RootViewControllerが初期化された後に呼び出される可能性があります。

アクセストークンをまだ持っていない可能性があるため、ViewControllerでURL​​接続を実行しないでください。これは、デリゲートメソッド自体で実行する必要があります。

ここで、ViewControllerの関数を使用し、AppDelegateでサーバー通信を行いたくない場合は、AppDelegateでViewControllerへの参照を取得し、ViewControllerのURL関数をパブリックにして呼び出します。

ViewControllerへの参照を取得することに関しては、アプリの設計を知らなければ、これに答えるのは難しいでしょう。

アプリのRootViewControllerがNavigationControllerであり、NavigationController RootViewControllerの名前がHomeNewViewControllerであるとすると、次のようにして、アプリデリゲートからアプリへのポインター参照を取得します。

NavigationController *navigationController = (NavigationController*) [self.window rootViewController];

HomeNewViewController *homeController = (HomeNewViewController*)[navigationController.viewControllers objectAtIndex:0];

次に、HomeNewViewControllerに、uploadTokenという関数があるとします。

その後、次のことができます。 [homeController uploadToken];

アップロードします。

于 2013-03-25T10:38:45.590 に答える
1

application:didRegisterForRemoteNotificationsWithDeviceTokenを呼び出した直後には呼び出されません[UIApplication registerForRemoteNotificationTypes:]

つまり、ビューが読み込まれるときにトークンを持っていると期待できます。UIを接続コードから分離します。application:didRegisterForRemoteNotificationsWithDeviceTokenビューコントローラのライフサイクルのある時点ではなく、が呼び出されたときに接続をトリガーする必要があります。application:didRegisterForRemoteNotificationsWithDeviceTokenが呼び出される前に、ユーザーに承認を求めるダイアログが表示される場合もあることに注意してください。

于 2013-03-25T10:39:49.027 に答える