2009-07-09 4 views
0

Ich möchte Sie über NSURLConnection in objective-c für iPhone fragen.Verbindung

Ich habe eine App, die eine Verbindung zu einem Webservice herstellen muss, um Daten zu erhalten (über YouTube-Videos), Dann habe ich alle Dinge, die ich verbinden muss (ähnlich Hello_Soap Beispielcode im Web).

Aber jetzt, mein Problem ist, dass ich eine Klasse (erbt von NSObject) mit dem Namen erstellen Connection und ich habe die Methoden implementiert: didReceiveResponse, didReceiveData, didFailWithError und connectionDidFinishLoading. Auch das Verfahren:

-(void)Connect:(NSString *) soapMessage{ 
    NSLog(soapMessage); 

    NSURL *url = [NSURL URLWithString:@"http://....."]; 
    NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url]; 
    NSString *msgLength = [NSString stringWithFormat:@"%d", [soapMessage length]]; 


    [theRequest addValue: @"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"]; 
    [theRequest addValue: msgLength forHTTPHeaderField:@"Content-Length"]; 
    [theRequest setHTTPMethod:@"POST"]; 
    [theRequest setHTTPBody: [soapMessage dataUsingEncoding:NSUTF8StringEncoding]]; 

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

    if(theConnection) 
    { 
     webData = [[NSMutableData data] retain]; 
    } 
    else 
    { 
     NSLog(@"theConnection is NULL"); 
    } 
} 

Aber wenn von meinem AppDelegate Ich erstelle ein Connection Objekt:

Connection * connect = [[Connection alloc] Init:num]; //It's only one param to test. 
[connect Connect:method.soapMessage]; 

Und ich nenne diese Methode, wenn dies abgeschlossen ist, ist es nicht weiter Aufruf didReceiveResponse, didReceiveData, didFailWithError oder connectionDidFinishLoading. Ich versuche dies zu tun, aber ich kann nicht für den Moment.

Die Sache, die ich tun möchte, ist in der Lage, diese Klasse "Verbindung" jedes Mal aufrufen, dass ich Daten erhalten möchte (danach zu analysieren und in UITableView s angezeigt).

Vielen Dank.

+0

Bitte posten Sie auch Ihre Delegiertenmethoden. Objective-C-Konvention ist auch, dass Methodennamen mit Kleinbuchstaben beginnen. – Chuck

Antwort

0

Ein Ausgangspunkt, den ich erkunden würde, ist, Ihre Klasse "Connect" nicht zu nennen. In Objective-C gibt es keine Namensräume und bei einem so allgemeinen Namen wie "Connect" ist es möglich, dass andere Klassen mit demselben Namen Probleme verursachen.

Die Konvention besteht darin, ein paar Zeichen, die mit dem Projekt oder Ihrer Firma in Verbindung stehen, voranzustellen. Wenn Ihr Projekt zum Beispiel "Amazing Thing" heißt, könnten Sie stattdessen die Klasse "ATConnector" nennen. Sie können den Klassennamen in der .h-Datei hervorheben und den Menübefehl "Refactor" verwenden, um ihn leicht zu ändern, während Sie auch andere Referenzen fixieren.

Auch wenn Sie entweder die Connect-Klasse oder die NSURLconnection nach dem Aufruf freigeben würden, hätte das den Effekt, dass keine Delegiertenmethoden aufgerufen werden - aber das ist schwer aus dem vorhandenen Code zu ermitteln.

+0

Es ist nicht notwendig, Präfixe zu verwenden, es sei denn, Sie beschäftigen sich mit externem Code. Die einzigen Apple-Klassen ohne Präfixe sind die Kern-Objective-C-Sprachklassen wie Object und Protocol. – Chuck

Verwandte Themen