[英]How to ensure that an iOS local notification gets delivered *after* the app terminates
[英]ios push notification terminates app
我想在单击推送通知上的查看按钮时启动我的应用程序,但如果应用程序不在后台,我的应用程序将被终止。
这是我来自控制台的错误消息。
Aug 9 10:35:41 unknown listingApp[4527] <Error>: -[__NSCFDictionary absoluteString]: unrecognized selector sent to instance 0x1a8b50
Aug 9 10:35:41 unknown listingApp[4527] <Error>: *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFDictionary absoluteString]: unrecognized selector sent to instance 0x1a8b50'
*** Call stack at first throw:
(
0 CoreFoundation 0x36df764f __exceptionPreprocess + 114
1 libobjc.A.dylib 0x34050c5d objc_exception_throw + 24
2 CoreFoundation 0x36dfb1bf -[NSObject(NSObject) doesNotRecognizeSelector:] + 102
3 CoreFoundation 0x36dfa649 ___forwarding___ + 508
4 CoreFoundation 0x36d71180 _CF_forwarding_prep_0 + 48
5 listingApp 0x00002d09 -[AppDelegate application:didFinishLaunchingWithOptions:] + 220
6 UIKit 0x35c12821 -[UIApplication _callInitializationDelegatesForURL:payload:suspended:] + 772
7 UIKit 0x35c0cb65 -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 272
8 UIKit 0x35be17d7 -[UIApplication handleEvent:withNewEvent:] + 1114
9 UIKit 0x35be1215 -[UIApplication sendEvent:] + 44
10 UIKit 0x35be0c53 _UIApplicationHandleEvent + 5090
11 GraphicsServices 0x3651be77 PurpleEventCallback + 666
12 CoreFoundation 0x36dcea97 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 26
13 CoreFoundation 0x36dd083f __CFRunLoopDoSource1 + 166
14 CoreFoundation 0x36dd160d __CFRunLoopRun + 520
15 CoreFoundation 0x36d61ec3 CFRunLoopRunSpecific + 230
16 CoreFoundation 0x36d61dcb CFRunLoopRunInMode + 58
17 UIKit 0x35c0bd49 -[UIApplication _run] + 372
18 UIKit 0x35c09807 UIApplicationMain + 670
19 listingApp 0x00002b93 main + 78
20 listingApp 0x00002b0c start + 52
)
Aug 9 10:35:41 unknown UIKitApplication:co.isale.isale[0xc768][4527] <Notice>: terminate called after throwing an instance of '
Aug 9 10:35:41 unknown UIKitApplication:co.isale.isale[0xc768][4527] <Notice>: NSException
Aug 9 10:35:41 unknown UIKitApplication:co.isale.isale[0xc768][4527] <Notice>: '
Aug 9 10:35:41 unknown ReportCrash[4528] <Notice>: Formulating crash report for process listingApp[4527]
Aug 9 10:35:41 unknown com.apple.launchd[1] <Warning>: (UIKitApplication:co.isale.isale[0xc768]) Job appears to have crashed: Abort trap: 6
这是我的 didFinishlaunchWithOptions 的开始
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSLog(@"didFinishLaunchingWithOptions");
viewController.webView = webView;
[viewController.view addSubview:webView];
// read from UISupportedInterfaceOrientations (or UISupportedInterfaceOrientations~iPad, if its iPad) from -Info.plist
NSArray* supportedOrientations = [self parseInterfaceOrientations:
[[[NSBundle mainBundle] infoDictionary] objectForKey:@"UISupportedInterfaceOrientations"]];
// read from PhoneGap.plist in the app bundle
NSDictionary *temp = [[self class] getBundlePlist:@"PhoneGap"];
settings = [[NSDictionary alloc] initWithDictionary:temp];
viewController = [ [ PhoneGapViewController alloc ] init ];
NSNumber *useLocation = [settings objectForKey:@"UseLocation"];
NSString *topActivityIndicator = [settings objectForKey:@"TopActivityIndicator"];
// The first item in the supportedOrientations array is the start orientation (guaranteed to be at least Portrait)
[[UIApplication sharedApplication] setStatusBarOrientation:[[supportedOrientations objectAtIndex:0] intValue]];
// push notification
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)];
// end of push notification
此代码来自另一个名为 AppDelegate.m 的委托文件
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSArray *keyArray = [launchOptions allKeys];
if ([launchOptions objectForKey:[keyArray objectAtIndex:0]]!=nil)
{
NSURL *url = [launchOptions objectForKey:[keyArray objectAtIndex:0]];
self.invokeString = [url absoluteString];
NSLog(@"listingApp launchOptions = %@",url);
}
return [super application:application didFinishLaunchingWithOptions:launchOptions];
}
请帮忙? 非常感谢感谢:)
看起来您还没有实现该方法
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
收到通知时调用此方法。
您似乎在字典上调用absoluteString
,您可能打算在NSURL
object 上执行此操作。
回复您的最新代码示例:
您正在做一些非常奇怪的事情,试图在launchOptions
字典中找到第一个键。 这不是如何使用字典。 您应该直接使用密钥( 在Launch Options Keys下列出),如下所示:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSURL *url = [launchOptions objectForKey:UIApplicationLaunchOptionsURLKey]
if (url)
{
self.invokeString = [url absoluteString];
NSLog(@"listingApp launchOptions = %@", url);
}
return [super application:application didFinishLaunchingWithOptions:launchOptions];
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.