sqlite läuft unter iOS8 nicht mehr so wie vorher.

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • sqlite läuft unter iOS8 nicht mehr so wie vorher.

    Hi,

    ich habe hier einen recht alten Code der ein paar Strings und ein Image als blob in eine sqlite schreiben soll. Das hat er auch immer getan, nur unter iOS8 stürzt er beim sqlite_step() am Ende ab, Leider einfach nur mit einem EXC_BAD_ACCEES und keiner weiteren Meldung.

    Wie kann ich herausfinden was er da nicht mag oder sieht jemand generell direkt einen Fehler?

    Danke

    Claus

    Quellcode

    1. -(BOOL)changePilot:(NSString*)command Pilot:(Pilot*)pilot Values:(NSInteger)values
    2. {
    3. BOOL ret=TRUE;
    4. NSString *birth=[dateForm stringFromDate:pilot.birth];
    5. sqlite3 *dbHandle;
    6. sqlite3_stmt *preparedStatement;
    7. int dbrc;
    8. dbrc = sqlite3_open([sql.dbFilePath UTF8String], &dbHandle);
    9. if (dbrc)
    10. {
    11. myLog(@"sqlite3_open: failed");
    12. return FALSE;
    13. }
    14. dbrc = sqlite3_prepare_v2(dbHandle,
    15. [command UTF8String],
    16. -1, &preparedStatement, NULL);
    17. if (dbrc)
    18. {
    19. sqlite3_close(dbHandle);
    20. myLog(@"sqlite3_prepare: failed");
    21. return FALSE;
    22. }
    23. if (sqlite3_bind_text (preparedStatement,1,[[pilot lastname] UTF8String],-1,SQLITE_STATIC)!= SQLITE_OK)
    24. {
    25. myLog(@"sqlite3_bin: failed");
    26. ret=FALSE;
    27. }
    28. if (sqlite3_bind_text (preparedStatement,2,[[pilot firstname] UTF8String],-1,SQLITE_STATIC)!= SQLITE_OK)
    29. {
    30. myLog(@"sqlite3_bin: failed");
    31. ret=FALSE;
    32. }
    33. if (sqlite3_bind_text (preparedStatement,3,[birth UTF8String],-1,SQLITE_STATIC)!= SQLITE_OK)
    34. {
    35. myLog(@"sqlite3_bin: failed");
    36. ret=FALSE;
    37. }
    38. if (sqlite3_bind_int (preparedStatement,4,(int)[pilot location])!= SQLITE_OK)
    39. {
    40. myLog(@"sqlite3_bin: failed");
    41. ret=FALSE;
    42. }
    43. if(pilot.stamp!=nil)
    44. {
    45. NSData *imgData = UIImagePNGRepresentation(pilot.stamp);
    46. if (sqlite3_bind_blob(preparedStatement, 5, (int)[imgData bytes],(int) [imgData length], NULL)!= SQLITE_OK)
    47. {
    48. myLog(@"sqlite3_bin: failed");
    49. ret=FALSE;
    50. }
    51. }
    52. else
    53. {
    54. if (sqlite3_bind_blob(preparedStatement, 5, 0, 0, NULL)!= SQLITE_OK)
    55. {
    56. myLog(@"sqlite3_bin: failed");
    57. ret=FALSE;
    58. }
    59. }
    60. if(values==6)
    61. {
    62. if (sqlite3_bind_int (preparedStatement,6,(int)[pilot number])!= SQLITE_OK)
    63. {
    64. myLog(@"sqlite3_bin: failed");
    65. ret=FALSE;
    66. }
    67. }
    68. if(ret==true)
    69. {
    70. dbrc = sqlite3_step(preparedStatement);
    71. if(dbrc!=SQLITE_DONE)
    72. {
    73. myLog(@"sqlite step: failed");
    74. ret=FALSE;
    75. }
    76. }
    77. sqlite3_finalize(preparedStatement);
    78. sqlite3_close(dbHandle);
    79. dbHandle=nil;
    80. return ret;
    81. }
    Alles anzeigen
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • was soll der falsche cast (int)[imgData bytes]? da sollte er doch warnen denn du machst aus einem 8-byte pointer einen 4-byte int!?
    außerdem sollte der 5te param nicht NULL sein (oder hast du die passende stelle in der doku zur hand die das sagt)?

    ansonsten vereinfachen.
    also zb nur einen string oder nur einen int oder nur ein blob schreiben und testen ob das dann klappt.
  • Danke, den cast habe ich jetzt seit Stunden überlesen. Da werde ich morgen ansetzen.
    Das NULL ist aus einem Democode übernommen glaube ich. Ich wie gesagt über 4 Jahre her das ich das geschrieben habe. Da war ich noch ziemlich neu im iOS. War mein erstes Projekt.

    Gruss

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Es war tatsächlich der cast von bytes auf (int). Lustigerweise habe ich an zwei anderen Stellen in der App ebenfalls einen binb_blob und da habe ich den cast weggelassen. Gott weis wie der da reingekommen ist.

    Das NULL machte in dem Fall nichts aus, da es der mglichen Konstante entspricht, dass sqlite sich um den Speicher nicht kümmern soll.

    Danke nochmal

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Thallius schrieb:

    Es war tatsächlich der cast von bytes auf (int).


    das war ja auch klar dass sowas bei kracht wenn es für 64 bit compiliert wird.
    aber der compiler sollte doch eigentlich warnen oder hast du die warnings ignoriert oder gar deaktiviert?
    aßerdem ist es kein cast von byte nach int (das wäre kein problem) sondern von einem pointer (64 bit) auf einen int (32 bit).
  • gritsch schrieb:

    Thallius schrieb:

    Es war tatsächlich der cast von bytes auf (int).


    das war ja auch klar dass sowas bei kracht wenn es für 64 bit compiliert wird.
    aber der compiler sollte doch eigentlich warnen oder hast du die warnings ignoriert oder gar deaktiviert?
    aßerdem ist es kein cast von byte nach int (das wäre kein problem) sondern von einem pointer (64 bit) auf einen int (32 bit).


    ist schon klar und nein der Compiler warnt nicht.
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Thallius schrieb:

    gritsch schrieb:

    Thallius schrieb:

    Es war tatsächlich der cast von bytes auf (int).


    das war ja auch klar dass sowas bei kracht wenn es für 64 bit compiliert wird.
    aber der compiler sollte doch eigentlich warnen oder hast du die warnings ignoriert oder gar deaktiviert?
    aßerdem ist es kein cast von byte nach int (das wäre kein problem) sondern von einem pointer (64 bit) auf einen int (32 bit).


    ist schon klar und nein der Compiler warnt nicht.


    dann würd ich mich daraum kümmern dass er das tut!

    korrekt wäre sowas: Incompatible integer to pointer conversion assigning to 'void *' from 'int'.
  • gritsch schrieb:

    Thallius schrieb:

    gritsch schrieb:

    Thallius schrieb:

    Es war tatsächlich der cast von bytes auf (int).


    das war ja auch klar dass sowas bei kracht wenn es für 64 bit compiliert wird.
    aber der compiler sollte doch eigentlich warnen oder hast du die warnings ignoriert oder gar deaktiviert?
    aßerdem ist es kein cast von byte nach int (das wäre kein problem) sondern von einem pointer (64 bit) auf einen int (32 bit).


    ist schon klar und nein der Compiler warnt nicht.


    dann würd ich mich daraum kümmern dass er das tut!

    korrekt wäre sowas: Incompatible integer to pointer conversion assigning to 'void *' from 'int'.


    Ich habe aber keine Warnings abgeschaltet. Also kann es an mir nicht liegen. Dann sag das Apple
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Thallius schrieb:

    gritsch schrieb:

    Thallius schrieb:

    gritsch schrieb:

    Thallius schrieb:

    Es war tatsächlich der cast von bytes auf (int).


    das war ja auch klar dass sowas bei kracht wenn es für 64 bit compiliert wird.
    aber der compiler sollte doch eigentlich warnen oder hast du die warnings ignoriert oder gar deaktiviert?
    aßerdem ist es kein cast von byte nach int (das wäre kein problem) sondern von einem pointer (64 bit) auf einen int (32 bit).


    ist schon klar und nein der Compiler warnt nicht.


    dann würd ich mich daraum kümmern dass er das tut!

    korrekt wäre sowas: Incompatible integer to pointer conversion assigning to 'void *' from 'int'.


    Ich habe aber keine Warnings abgeschaltet. Also kann es an mir nicht liegen. Dann sag das Apple


    dann solltest du die einstellungen trotzdem überprüfen denn früher (du hast ja ein altes projekt) hat apple viele fragwürdige einstellungen als default gehabt...