Ich habe eine unabhängige Klasse für die HTTP-Verbindung erstellt. Die Verbindung funktioniert einwandfrei. Das Problem ist, dass ich finde, dass die Methode "didReceiveData" NACH der Methode aufgerufen wird, die die Verbindung aufruft. (Methode ‚didReceiveData‘ wird nach IBAction aufgerufen werden ‚akzeptieren‘)Diskussion über die Methode 'didReceiveData' für die HTTP-Verbindung
- (IBAction)accept:(id)sender {
[self connect:url];
//labelStr = ReturnStr; Cannot be written here.
}
-(void)connect:(NSString *)strURL
{
NSURLRequest *theRequest=[NSURLRequest requestWithURL:[NSURL URLWithString:strURL]
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60.0];
NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
if (theConnection)
{
// receivedData is declared as a method instance elsewhere
receivedData = [[NSMutableData data] retain];
}
else
{
// inform the user that the download could not be made
}
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
// append the new data to the receivedData
[receivedData appendData:data];
ReturnStr = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
}
Dies wird zu einem Problem führen, dass, wenn ich den Text eines Etiketts auf die empfangene Zeichenfolge ändern möchten, kann der Code nicht in IBAction geschrieben werden " akzeptieren‘, sondern müssen in der Methode geschrieben werden‚didReceiveData‘wie folgt aus:
MainViewController *mainView = [[MainViewController alloc] initWithNibName:@"MainView" bundle:nil];
AMEAppDelegate *delegate = [[UIApplication sharedApplication] delegate];
[delegate.navController pushViewController:mainView animated:YES];
mainView.labelStr.text = ReturnStr;
Ein weiteres Problem besteht darin, dass die Daten auf Mainview überschrieben wird, wenn ich in Mainview initialisieren‚didReceiveData‘. Ist es mir möglich, den Text von labelStr zu ändern, ohne MainView zu initialisieren?
Wie wird die Verbindung beim Laden beendet? Gibt es etwas wie didFinishLoading-Methode? –
Mit sendSynchronousRequest: returningResponse: error :, wird alles von dieser Methode verwaltet. Wenn die Methode zurückkehrt, wurde die Verbindung geöffnet, die Anforderung gesendet, die Antwort empfangen und die Verbindung wieder geschlossen. Das könnte allerdings ein paar Sekunden dauern. –