我有一个tabbar应用程序,让我们说我想切换到第二个标签,并在12:00时弹出警报,即使我的应用程序没有运行。
我得到了UILocalNotification的所有代码正常工作,但后来我认为最好的方法是通过发布应用代表的通知:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Add the tab bar controller's view to the window and display.
[window addSubview:tabBarController.view];
[window makeKeyAndVisible];
// Handle launching from a notification when the app is NOT running
UILocalNotification *localNotification = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];
if (localNotification) {
[tabBarController setSelectedIndex:1];
[[NSNotificationCenter defaultCenter] postNotificationName:@"AlertNotification" object:self];
}
return YES;
}
然后,在我的SecondViewController.m中,我有:
- (void)viewDidLoad {
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(popUpAlert:) name:@"AlertNotification" object:nil];
}
但这不起作用。我怀疑在没有调用SecondViewController的viewDidLoad时发送通知,对吧?有可能解决这个问题吗?你是否同意我在这种情况下使用NSNotificationCenter
的方法?
提前致谢。
答案 0 :(得分:3)
我快速创建了一个测试项目并通过将通知注册放在awakeFromNib
(假设在xib文件中创建SecondViewController
)来使其工作。
- (void)awakeFromNib {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(popUpAlert:) name:@"AlertNotification" object:nil];
}
答案 1 :(得分:0)
我猜,你是对的。它不起作用,因为您在将视图控制器添加为观察者之前发布通知。
另一种方法是向应用代理添加bool属性,以指示应用是否已从本地通知启动。
可以使用[[UIApplication sharedApplication] delegate]
从应用中的任意位置请求应用代理。
答案 2 :(得分:0)
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes: UIUserNotificationTypeAlert | UIUserNotificationTypeBadge categories:nil];
[[UIApplication shareApplication] registerUserNotificationSettings: settings];