簡體   English   中英

從AppDelegate訪問ViewController

[英]Access ViewController from AppDelegate

我的問題如下,

在我的一個ViewControllers ,當用戶點擊一個按鈕時,我使用此代碼注冊設備以獲取通知。

[[UIApplication sharedApplication] registerForRemoteNotificationTypes:
(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];

然后,在AppDelegte ,有兩種方法。 一個接收令牌,另一個收到錯誤。

- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
- (void)application:(UIApplication*)application didFailToRegisterForRemoteNotificationsWithError:(NSError*)error

現在出現了問題,在didRegisterForRemoteNotificationsWithDeviceToken我需要將令牌發送到我的服務器,並使用它輸入用戶在View輸入的一些數據,如用戶名。

我怎樣才能獲得這些數據?

NSNotificationCenter將在這里為您提供良好的服務。 在AppDelegate的didRegisterForRemoteNotificationsWithDeviceToken ,執行以下操作:

[[NSNotificationCenter defaultCenter] postNotificationName:@"RegistrationReceived"
                                                    object:token];

並且,在你的控制器的viewDidLoad

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

確保實現-updateRegistrationInfo:或任何你想要命名的東西)來接收NSNotification和令牌,它作為參數傳入。 此外,當您不再需要時,請取消注冊通知。

- (void)updateRegistrationInfo:(NSNotification *)notification
{
    NSString *myObject = [notification object];
    ...
}

您可以將ViewController作為實例變量添加到AppDelegate類中:

@interface AppDelegate : NSObject <UIApplicationDelegate>
{
@private // Instance variables

    UIWindow *mainWindow; // Main App Window

    UINavigationController *navigationController;

    UIViewController *someViewController;
}

然后向someViewController添加一些返回所請求數據的方法。

您可以指定在someViewController - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions中的AppDelegate這樣的類:

someViewController = [[UIViewController alloc] initWithNibName:nil bundle:nil]; 

navigationController = [[UINavigationController alloc] initWithRootViewController:someViewController];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM