我的问题如下,
在我的一个ViewControllers
中,当用户点按一个按钮时,我会使用此代码注册设备以获取通知。
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:
(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];
然后,在AppDelegte
中,有两种方法。一个接收令牌,另一个收到错误。
- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
- (void)application:(UIApplication*)application didFailToRegisterForRemoteNotificationsWithError:(NSError*)error
现在出现了问题,在didRegisterForRemoteNotificationsWithDeviceToken
我需要将令牌发送到我的服务器,并使用它输入用户在View
中输入的一些数据,就像它的用户名一样。
如何获取此数据?
答案 0 :(得分: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 :(得分: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
类的AppDelegate
中分配someViewController:
someViewController = [[UIViewController alloc] initWithNibName:nil bundle:nil];
navigationController = [[UINavigationController alloc] initWithRootViewController:someViewController];