9 berichten aan het bekijken - 1 tot 9 (van in totaal 9)
  • Q:
    Bijdrager
    T. van Beek

    Error in App via PhoneGap

    Sorry, ik had hem al gepost in Apps; niet goed gekeken.

    Ik zit op dit moment in de afrondende fase van het bouwen van een app. Wanneer ik hem vanuit XCode wil draaien op m’n iPhone (4) komt hij niet verder dan de splash screen, de melding die ik in XCode krijg is:

     
    2013-01-23 13:26:06.945 Test1[14163:907] -[__NSCFBoolean isEqualToString:]: unrecognized selector sent to instance 0x3b153530
    2013-01-23 13:26:06.948 Test1[14163:907] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFBoolean isEqualToString:]: unrecognized selector sent to instance 0x3b153530'
    *** First throw call stack:
    (0x32bc72a3 0x33a8597f 0x32bcae07 0x32bc9531 0x32b20f68 0x10fbeb 0xcc483 0x3a39458d 0x3a3d4d71 0x3a3d0ae5 0x3a4121c9 0xcc0c1 0x3a3d5ad1 0x3a3d565b 0x3a3cd843 0x3a375c39 0x3a3756cd 0x3a37511b 0x3a90c5a3 0x3a90c1d3 0x32b9c173 0x32b9c117 0x32b9af99 0x32b0debd 0x32b0dd49 0x3a3cc47d 0x3a3c92f9 0xcbb03 0x3661db20)
    libc++abi.dylib: terminate called throwing an exception
    (lldb)
     

    Na uren speuren en zoeken kom ik er niet achter waar het probleem ligt en vooral hoe dit op te lossen is. Iemand hier een idee en/of tips?

    Inactief
    Anoniem

    Zoals ik al in het andere draadje antwoordde, het object met het adres 0x3b153530 is de boosdoener. Blijkbaar stuur je de selector ‘isEqualToString’ naar een object dat geen NSString is.

    Bijdrager
    T. van Beek

    Probleem is dat ik weinig weet van hardcoding in XCode (Gebruik PhoneGap om daaromheen te werken), dit is wat ik krijg in XCode:

    Iemand die hier iets meer sturing aan kan geven?:)

    Bijdrager
    Verwijder

    Wat ik er uit haal is dat er een property BackupWebStorage is die vroeger een boolean was en nu een string is geworden. Dit komt overeen met de melding dat isEqualToString: naar een boolean wordt gestuurd terwijl dat alleen naar een string kan. Er wordt verwezen naar de documentatie, heb je daar al gelezen? Is er een config.xml settings file waarin staat?

    Bijdrager
    T. van Beek

    Ja, na veel lezen heb ik nu wel het punt waar de fout zou moeten liggen eruit;

        if (IsAtLeastiOSVersion(@"5.1") && (([backupWebStorage isEqualToString:@"local"]) ||

    De hele if statement:

     
        if (IsAtLeastiOSVersion(@"5.1") && (([backupWebStorage isEqualToString:@"local"]) ||
                ([backupWebStorage isEqualToString:@"cloud"] && !IsAtLeastiOSVersion(@"6.0")))) {
            [self registerPlugin:[[CDVLocalStorage alloc] initWithWebView:self.webView settings:[NSDictionary dictionaryWithObjectsAndKeys:
                        @"backupType", backupWebStorageType, nil]] withClassName:NSStringFromClass([CDVLocalStorage class])];
        }

    Ik weet dat het een beetje dom is; maar waar zit hier de fout?

    Inactief
    Anoniem

    Wat Willemien zegt, backupWebStorage is geen NSString, en crasht dus omdat het isEqualToString niet herkent. Waar is backupWebStorage gedeclareerd?

    Heb je hier wat aan: http://stackoverflow.com/questions/13841606/phonegap-crash-after-upgrade-to-2-2-0 ?

    Ik kan je trouwens sterk aanraden om zeker Objective C, Cocoa en Xcode te leren. Een app flans je niet zomaar even in elkaar, je moet goed weten waar je mee bezig bent, zo blijkt maar weer:wink:

    Bijdrager
    T. van Beek

    Hij doet het! Harstikke bedankt voor de hulp, ben echt een beginner op dit gebied (Wel veel ervaring in web/javascript etc. dus niet helemaal blank). Ik ga zsm aan de slag met XCode en zal hier niet zo snel meer met zulke vragen langskomen;) Nogmaals thanks!

    Bijdrager
    bitsflew

    Ik ga zsm aan de slag met XCode en zal hier niet zo snel meer met zulke vragen langskomen

    Optimist:)

    Bijdrager
    readefries

    Je moet niet testen op versienummer, maar controller het klasse type en of deze klassen de methode heeft met respondsToSelector. Mocht Apple besluiten bepaalde zaken te verwijderen, dan gaat je app alsnog crashen.

     
     
    if ([backupWebStorage isKindOfClass:[NSString class]] && [backupWebStorage respondsToSelector:@selector(isEqualToString)]) 
    {
        [self registerPlugin:[[CDVLocalStorage alloc] initWithWebView:self.webView settings:[NSDictionary dictionaryWithObjectsAndKeys:
                        @"backupType", backupWebStorageType, nil]] withClassName:NSStringFromClass([CDVLocalStorage class])];
    }
     

    Ik zou ik je aanraden de stukken uit te schrijven zodat het leesbaar blijft. Je hebt nu in één regel twee klasse instanties gemaakt en iets met die klasse instanties gedaan, hierdoor gaat het overzicht snel verloren.

9 berichten aan het bekijken - 1 tot 9 (van in totaal 9)

Je moet ingelogd zijn om een reactie op dit onderwerp te kunnen geven.