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,比如它的用户名。

我怎样才能得到这些数据?

4

2 回答 2

10

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];
    ...
}
于 2013-02-12T17:51:34.977 回答
1

您可以将您的ViewController作为实例变量添加到您的AppDelegate类中:

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

    UIWindow *mainWindow; // Main App Window

    UINavigationController *navigationController;

    UIViewController *someViewController;
}

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

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

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

navigationController = [[UINavigationController alloc] initWithRootViewController:someViewController];
于 2013-02-12T17:35:40.817 回答