로컬 알림을 사용하는 앱이 있습니다. 최근까지 모든 것이 잘 작동했지만 iOS 8이 출시 된 후 앱이 실행되지 않을 때 (프로세스에서 제거됨) 내 로컬 알림이 작동하지 않습니다. 내 로컬 알림을 설정하는 응용 프로그램 대리인의 코드입니다.앱이 실행되지 않을 때 iOS8의 LocalNotification이 제대로 작동하지 않습니다.
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
[[NSNotificationCenter defaultCenter] postNotificationName:localReceived object:self userInfo:notification.userInfo];
// Set icon badge number to zero
application.applicationIconBadgeNumber = 0;
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
if ([UIApplication instancesRespondToSelector:@selector(registerUserNotificationSettings:)])
{
[application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:
UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound categories:nil]];
}
else if ([UIApplication instancesRespondToSelector:@selector(registerForRemoteNotificationTypes:)])
{
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:
(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];
}
...
// Local notificaiton example. Icon badge
UILocalNotification *locationNotification = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];
NSLog(@"locationNotification:%@",locationNotification.alertBody);
if (locationNotification) {
// Set icon badge number to zero
application.applicationIconBadgeNumber = 0;
// call local notification method
[self application:[UIApplication sharedApplication] didReceiveLocalNotification:locationNotification];
}
return YES;
}
내 앱이 실행되고 있지 않을 때 didFinishLaunchingWithOptions : 메서드가 호출됩니다. 그것에서는 didReceiveLocalNotification 메서드를 다시 호출합니다. postNotificationName입니다. 내 ViewControllers있는 viewDidLoad 방법에 관찰자를 넣어 : 응용 프로그램이 실행되지 않을 때 호출되지 않습니다 :
- (void)viewDidLoad
{
...
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(recieveLocalNotification:) name:localReceived object:nil];
...
}
문제는 방법 recieveLocalNotification이 있다는 것입니다. 앱이 백그라운드에서 실행될 때마다 호출됩니다. 아무도 내가 여기서 뭘 잘못하고 있다고 말할 수 있습니까? 미리 감사드립니다.
응용 프로그램이 실행 중이 아니며 백그라운드로 다시 시작되면 viewController가 인스턴스화되지 않으므로 알림을받을 수 없습니다. – Paulw11
안녕하세요 @ Paulw11, 빠른 답변에 감사드립니다! 사용중인 VC는 ** didFinishLaunchingWithOptions ** 메소드에서 인스턴스화됩니다 (여기서 3 개의 점은 내 코드 스 니펫에 있음). 아직도 너무 빠르다 고 할 수 있겠습니까? 나는 터트를 우회하기 위해 무엇을 할 수 있습니까? NSTimer를 추가 하시겠습니까? – iPhoneNoob
왜 NSNotificationcentre를 통한 감 결합에 의존하지 않고 직접 메서드를 호출할까요? – Paulw11