Problem beim Threading

  • Problem beim Threading

    Ich habe eine Funktion, die bei aufrufen Daten in eine Datenbank im auf einem Webserver schreibt.

    Wenn
    ich die Funktion direkt aufgerufen wird, klappt alles wunderbar. Wenn
    ich die Funktion aber in einen anderen Thread packe, um den Benutzer
    nicht aufzuhalten, durchläuft er den Code zwar, schreibt aber keine
    Daten auf den Webserver.

    Quellcode

    1. -(IBAction)pushSend:(UIButton *)sender {
    2. [self performSelectorInBackground:@selector(dateneintragen) withObject:nil];
    3. }
    4. -(IBAction)pushSendDirekt:(UIButton *)sender {
    5. [self dateneintragen];
    6. }


    hier die Funktion

    Quellcode

    1. - (void)dateneintragen {
    2. NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    3. NSLog(@"Start DB ...");
    4. NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://www.telekom.de"]];
    5. NSURLRequest *request = [NSURLRequest requestWithURL:url];
    6. NSURLResponse *response = nil;
    7. NSError *error = nil;
    8. NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
    9. if ([error code] != kCFURLErrorNotConnectedToInternet) {
    10. NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    11. NSDate *date = [NSDate dateWithTimeIntervalSinceNow:0];
    12. [formatter setDateFormat:@"HH:mm:ss"];
    13. NSString *zeit = [formatter stringFromDate:date];
    14. [formatter setDateFormat:@"YYYY-MM-dd"];
    15. NSString *datum = [formatter stringFromDate:date];
    16. NSString *urlAddress = [NSString stringWithFormat:@"http://db......de/daten.php?a=test&d=%@&t=%@",datum,zeit];
    17. NSURL *url = [NSURL URLWithString:urlAddress];
    18. NSURLRequest *request = [NSURLRequest requestWithURL:url];
    19. NSURLConnection *connect = [[NSURLConnection alloc] initWithRequest:request delegate:self];
    20. [connect release];
    21. [formatter release];
    22. NSLog(@"%@",urlAddress);
    23. }
    24. data = nil;
    25. [self performSelectorOnMainThread:@selector(fertig) withObject:nil waitUntilDone:NO];
    26. [pool release];
    27. }
    Alles anzeigen


    Die NSLog's werden in beiden Fällen durchlaufen.
  • bastl schrieb:

    kannst Du mir zu dem RUNLOOP noch einen Tipp geben wie ich das einbaue

    Einbauen musst du die Run-Loop gar nicht, weil sie automatisch zu jedem Thread existiert. Du kannst sie mit [[NSRunLoop currentRunLooop] run] betreten.

    Aber wie bereits erwähnt, ist es nur selten sinnvoll, etwas zu threaden, was man über die Haupt-Run-Loop abwickeln kann. Ich sehe bei dir auch keinen Grund dafür.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?