Alert Aufruf scheitert

  • Alert Aufruf scheitert

    Hallo zusammen,

    ich habe einen SOAPController:NSObject geschrieben, der auch gut läuft.
    Probleme bereitet mir der Alert-Aufruf, wenn keine Internetverbindung besteht.
    Aus unerklärlichen Gründen steigt das Programm an der Stelle [keinZugangInfo show]; ohne Fehlermeldung aus.


    Quellcode

    1. -(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
    2. NSLog(@"ERROR (SOAPController.m/connection:didFailWithError): %@",error);
    3. /* Meldet richtiger Weise:Error Domain=NSURLErrorDomain Code=-1009 "Es besteht anscheinend keine Verbindung zum Internet." UserInfo=0x4d25c50 {NSErrorFailingURLStringKey=https://www.xxxxxx.de/mws/1.0/basic.php, NSErrorFailingURLKey=https://www.xxxx/basic.php, NSLocalizedDescription=Es besteht anscheinend keine Verbindung zum Internet., NSUnderlyingError=0x4d24230 "Es besteht anscheinend keine Verbindung zum Internet."}
    4. */
    5. UIAlertView *keinZugangInfo = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Achtung!",nil)
    6. message:NSLocalizedString(@"Es kann keine Verbindung zum Internet aufgebaut werden.",nil)
    7. delegate:nil
    8. cancelButtonTitle:@"OK"
    9. otherButtonTitles:nil];
    10. [keinZugangInfo show];
    11. [keinZugangInfo release];
    12. [connection release];
    13. [webData release];
    14. }
    Alles anzeigen


    Hat jemand eine Idee woran das liegt?
    In x Beispielen wird es genau so gemacht.

    Grüße,
    mcebs
  • Ich versuche es genauer zu sagen:
    Wenn ich mit dem Debugger von [keinZugangInfo show]; auf [keinZugangInfo release]; wechsel, bleibt der iOS 4.3.2. Simulator stehen.
    Die Alert-Meldung erscheint nicht.

    (ein selegate:self brachte auch nichts)
    Gruß,
    Paul.
  • Thallius schrieb:

    Läuft die Methode auch im MAinThread ? Weil das sieht mir nach einer Delegate Methode von URLRequest aus und das läuft doch normal asynchron (also im Background Thread)

    Gruß

    Claus
    Ja sie läuft im Main-Thread. Die Connection wird mit einem URLRequest folgt angelegt:

    Quellcode

    1. NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self];

    Mit Threads habe ich mich noch nie beschäftigt. Muss ich das ernsthaft für die Ausgabe dieser Alert-Meldung tun?
    Ähnliche Alerts (z.B. in connectionDidFinishLoading) funktionieren prima.


    Danke und Gruß,
    Paul.
  • Eventuell liegt es gar nicht am Alert. Dokumentier einfach mal die drei letzten Zeilen mit den Releases aus und schau was passiert. Der Alert wird im Debugger ja nicht angezeigt nachdem Du show aufrufst, sondern erst wenn er das nächste mal in die Runloop kommt. Dafür muss er aber erstmal die drei Releases überleben. Wenn da was nicht stimmt, dann könnte das der Grund für den Absturz sein.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

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

    Eventuell liegt es gar nicht am Alert. Dokumentier einfach mal die drei letzten Zeilen mit den Releases aus und schau was passiert. Der Alert wird im Debugger ja nicht angezeigt nachdem Du show aufrufst, sondern erst wenn er das nächste mal in die Runloop kommt. Dafür muss er aber erstmal die drei Releases überleben. Wenn da was nicht stimmt, dann könnte das der Grund für den Absturz sein.
    Ich werd verrückt. Es lag tatsächlich an der Zeile [connection release];
    So richtig verstanden warum das passiert habe ich allerdings noch nicht.

    Vielen Dank!
    Gruß,
    Paul.
  • Wenn Du einem Attribut außerhalb von dealloc ein release sendest, solltest Du es danach entweder auch auf einen neuen, gültigen Wert setzen. Ansonsten hast Du einen Dangling Pointer.

    Oder Du machst es direkt sauber & richtig und setzt den Wert über den Setter.
    „Meine Komplikation hatte eine Komplikation.“