2011-08-09 68 views
1

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

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

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

请帮助另一位代表文件的开头? 许多感谢感谢:)

+0

你需要表现出一定的代码。 – jtbandes

+0

对不起:)你可以看到这是我的第一篇文章,现在会发布代码 – Min

回答

0

您似乎在字典上调用absoluteString,在那里您可能打算在NSURL对象上执行此操作。

重新您最新的代码示例:

你正在做的事情很奇怪,试图找到在launchOptions字典中的第一个关键。这不是如何使用字典。您应该使用的按键(上市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]; 
} 
+0

谢谢@Pnutus我会在原贴中张贴另一个代码 – Min

+0

谢谢@Pnutus,我会试试你的解决方案:) – Min

+0

@Min,它工作吗? –

0

看起来你还没有实现的方法

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

当收到通知时调用此方法。

+0

不,我不这么认为 - 注意实际的错误是关于调用'absoluteString'的。这可能是一个内存管理错误。 – jtbandes

+0

你说得对,我没有注意到它。 –

+0

感谢ibeitia的快速响应,不幸的是,didReceiveRemoteNotificaion只会在应用程序处于后台时才能工作。 – Min