2013-02-12 152 views
2

我的问题是下面,访问视图控制器从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已经进入,喜欢它的用户名。

我该如何获得这些数据?

回答

9

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]; 
    ... 
} 
1

可以能够作为实例变量添加ViewControllerAppDelegate类:

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

    UIWindow *mainWindow; // Main App Window 

    UINavigationController *navigationController; 

    UIViewController *someViewController; 
} 

,然后添加一些方法来someViewController返回请求的数据。

您可以通过这种方式在AppDelegate类的- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions分配someViewController:

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

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

好吧,但现在..我如何分配ViewController到这个变量? – Gonzo 2013-02-12 17:44:50

+2

查看我的答案 – 2013-02-12 17:46:55

+0

这会起作用,但它有点像黑客......当你想要做的是向前传播通知,向下传递给控制器​​时,你会倒退,仰望层次结构的顶部。看看'NSNotificationCenter' ...我在回答你的问题时提供了更多的细节。 – macserv 2013-02-12 17:59:59

相关问题