2011-07-29 13 views
6

Mam tu problem: mam ustawioną aplikację, aby nie działała w tle, a ja ustawiam dzienneInterval localnotification za pomocą wtyczki localNotification, którą znalazłem na githubie tutaj : https://github.com/phonegap/phonegap-plugins/tree/master/iPhone/LocalNotificationAplikacja PhoneGap/iOS LocalNotification Zawieszanie po stuknięciu "Widok"

Aplikacja ulega awarii po wyświetleniu powiadomienia, a ja pukam "Wyświetl" ... wygląda na to, że coś jest wysyłane i nie wie, co się dzieje. Ja też nie wiem, co się dzieje, ponieważ Objective C jest dla mnie językiem obcym. Ktoś ma jakieś pomysły?

--------- Console Log ---------- 

7/29/11 11:05:48 AM popołudniowe Afirmacje [12004] - [UIConcreteLocalNotification absoluteString]: nierozpoznany selektor wysyłane do instancji 0x5c22240

7/29/11 11:05:48 AM Afternoon Affirmations[12004] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIConcreteLocalNotification absoluteString]: unrecognized selector sent to instance 0x5c22240' 
*** Call stack at first throw: 
(
    0 CoreFoundation      0x017f65a9 __exceptionPreprocess + 185 
    1 libobjc.A.dylib      0x0194a313 objc_exception_throw + 44 
    2 CoreFoundation      0x017f80bb -[NSObject(NSObject) doesNotRecognizeSelector:] + 187 
    3 CoreFoundation      0x01767966 ___forwarding___ + 966 
    4 CoreFoundation      0x01767522 _CF_forwarding_prep_0 + 50 
    5 Afternoon Affirmations    0x00002f21 -[AppDelegate application:didFinishLaunchingWithOptions:] + 257 
    6 UIKit        0x002f7c89 -[UIApplication _callInitializationDelegatesForURL:payload:suspended:] + 1163 
    7 UIKit        0x002f9d88 -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 439 
    8 UIKit        0x00304617 -[UIApplication handleEvent:withNewEvent:] + 1533 
    9 UIKit        0x002fcabf -[UIApplication sendEvent:] + 71 
    10 UIKit        0x00301f2e _UIApplicationHandleEvent + 7576 
    11 GraphicsServices     0x020e5992 PurpleEventCallback + 1550 
    12 CoreFoundation      0x017d7944 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52 
    13 CoreFoundation      0x01737cf7 __CFRunLoopDoSource1 + 215 
    14 CoreFoundation      0x01734f83 __CFRunLoopRun + 979 
    15 CoreFoundation      0x01734840 CFRunLoopRunSpecific + 208 
    16 CoreFoundation      0x01734761 CFRunLoopRunInMode + 97 
    17 UIKit        0x002f97d2 -[UIApplication _run] + 623 
    18 UIKit        0x00305c93 UIApplicationMain + 1160 
    19 Afternoon Affirmations    0x00002d7f main + 127 
    20 Afternoon Affirmations    0x00002cf5 start + 53 
) 

7/29/11 11:05:48 AM UIKitApplication:com.InTheRooms.AfternoonAffirmations[0x9a52][12004] terminate called after throwing an instance of 'NSException' 
+0

+1, mam ten sam problem. Znalazłeś rozwiązanie? – Samuel

+0

Nie ulega awarii podczas ustawiania aplikacji w tle (aplikacja nie działa w tle = NIE). Ale nadal się zawiesza z tą właściwością, jeśli aplikacja nie jest już w pamięci: -/ – Samuel

+0

@SamuelMichelot Mam problem z uzyskaniem tej wtyczki do pracy (bez awarii, bez powiadomień). Może to ustawienie jest właściwe. Czy możesz mi pomóc? – xdumaine

Odpowiedz

3

OK, znalazłem problem, to w pliku AppDelegate.m, a dokładniej w metodzie: didFinishLaunchingWithOptions. Metoda ta zakłada, że ​​pierwsze parametry opcja jest url (ale to nie jest, kiedy uruchomić aplikację za pośrednictwem lokalnego Powiadamianie szybkie i brudne poprawka jest do komentowania kodu.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    //commented out because it makes the app crash at startup with local notification... 
    /*NSArray *keyArray = [launchOptions allKeys]; 
    if ([launchOptions objectForKey:[keyArray objectAtIndex:0]]!=nil) 
    { 
     NSURL *url = [launchOptions objectForKey:[keyArray objectAtIndex:0]]; 
     self.invokeString = [url absoluteString]; 
     NSLog(@"Mosa_fr_en-busi launchOptions = %@",url); 
    }*/ 

    return [super application:application didFinishLaunchingWithOptions:launchOptions]; 
} 
0

Trochę lepszym rozwiązaniem jest coś tak:..

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    NSArray *keyArray = [launchOptions allKeys]; 
    if ([keyArray count] > 0) { 
     id option = [launchOptions objectForKey:[keyArray objectAtIndex:0]]; 
     if ([option isKindOfClass:[NSURL class]]) { 
      NSURL *url = (NSURL *)option; 
      self.invokeString = [url absoluteString]; 
      NSLog(@"ContactInbox launchOptions = %@",url); 
     } 
    } 

    return [super application:application didFinishLaunchingWithOptions:launchOptions]; 
} 

Jeśli ktoś wie, co klucz PhoneGap spodziewa się na URL lepiej zastąpić [keyArray objectAtIndex:0] część z faktycznym kluczem

0

miałem podobny problem z lokalnych powiadomień rozwiązanie, które wybrałem jest trochę różn czynsz (choć dość podobny). Używam sprawdzania opcji uruchamiania lokalnego powiadomienia (UIApplicationLaunchOptionsLocalNotificationKey).

Oto krótki przykład:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    UILocalNotification *localNotif = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey]; 

    if(localNotif) 
    { 
     // Do whatever you need to do with that local notitication 
    } 
    else 
    { 
     NSArray *keyArray = [launchOptions allKeys]; 
     if ([launchOptions objectForKey:[keyArray objectAtIndex:0]]!=nil) 
     { 
      NSURL *url = [launchOptions objectForKey:[keyArray objectAtIndex:0]]; 
      self.invokeString = [url absoluteString]; 
     } 
    } 
    return [super application:application didFinishLaunchingWithOptions:launchOptions]; 
} 

Jabłko Docs: http://developer.apple.com/library/mac/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/IPhoneOSClientImp/IPhoneOSClientImp.html