[英]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.