I want to launch my app when clicking view button on push notification but my app gets terminated if the app is not in background.
here is my error message from console.
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(NSO开发者_如何学运维bject) 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
and this is the beginning of my 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
this code is from another delegate file called 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];
}
please help? many thanks thanks :)
You seem to be calling absoluteString
on a dictionary, where you probably meant to do it on an NSURL
object.
Re your latest code sample:
You are doing something very strange, trying to find the first key in the launchOptions
dictionary. This is not how to use dictionaries. You should use the keys (listed here under Launch Options Keys) directly, like this:
- (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];
}
It looks like you haven't implemented the method
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
This method is called when a notification is received.
精彩评论