从AppDelegate访问ViewController

3

我的问题如下,

在我的一个ViewControllers中,当用户点击一个按钮时,我使用以下代码注册通知设备。

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

然后,在AppDelegte中,有两个方法。一个用于接收令牌,另一个用于获取错误信息。

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

现在来到了问题,我需要在didRegisterForRemoteNotificationsWithDeviceToken中将令牌发送给我的服务器,并且还要发送用户在View中输入的一些数据,例如用户名。

我如何获取这些数据呢?

2个回答

10
在您的AppDelegate中的didRegisterForRemoteNotificationsWithDeviceToken方法中使用NSNotificationCenter。以下是示例代码:
[[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
你可以将你的ViewController作为实例变量添加到你的AppDelegate类中:
@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];

好的,但现在..我该如何将ViewController分配给这个变量? - Gonzo
这个方法可以运行,但有点像是一个hack... 当你想要向前传递通知到控制器时,你却在向后查找你的层级结构,回到了顶部。看看NSNotificationCenter...我在你的问题答案中提供了更多细节。 - macserv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接