ios推送通知终止应用程序

Posted

技术标签:

【中文标题】ios推送通知终止应用程序【英文标题】:ios push notification terminates app 【发布时间】:2011-08-09 17:43:01 【问题描述】:

我想在点击推送通知上的查看按钮时启动我的应用,但如果应用不在后台,我的应用就会终止。

这是来自控制台的错误消息。

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];

请帮忙? 非常感谢谢谢:)

【问题讨论】:

你还需要显示一些代码。 对不起 :) 你可以看到这是我的第一篇文章,现在将发布代码 【参考方案1】:

您似乎在字典上调用 absoluteString,而您可能打算在 NSURL 对象上调用。

是您最新的代码示例:

您正在做一些非常奇怪的事情,试图在launchOptions 字典中找到第一个键。这不是如何使用字典。您应该直接使用这些键(在 Launch Options Keys 下列出 here),如下所示:

- (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];

【讨论】:

谢谢@Pnutus,我会试试你的解决方案:) 抱歉,伙计,疯狂的工作日程让我暂时无法恢复 :( 将很快尝试! 那个代码就像一个魅力:) 谢谢谢谢谢谢@Pnutus :)【参考方案2】:

看来你还没有实现方法

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo

收到通知时调用此方法。

【讨论】:

不,我不这么认为——注意实际的错误是关于调用absoluteString。这可能是内存管理错误。 感谢 ibeitia 的快速响应,不幸的是,didReceiveRemoteNotificaion 仅在应用程序处于后台时才能工作。

以上是关于ios推送通知终止应用程序的主要内容,如果未能解决你的问题,请参考以下文章

如果应用程序终止,则未收到 iOS FCM 推送通知

当应用程序处于终止状态时,iOS 静默推送通知不会收到

(iOS) GCM 静默推送通知以在应用程序终止时触发调用另一个 API

iOS React 在应用程序被杀死时推送通知

在 IOS 中未收到 FCM 推送通知。而应用程序在后台或终止。我使用 FirebaseMessaging 6.0.9 Pub

当应用程序在后台或终止时,iOS 设备不会推送通知。导航到下一个屏幕在 Flutter 的 IOS 设备中也不起作用?