Я создал независимый класс для HTTP-соединения. Все соединение работает отлично. Проблема в том, что я обнаружил, что метод didReceiveData будет вызываться ПОСЛЕ метода, который вызывает соединение. (метод didReceiveData будет вызван после принятия команды IBAction)
- (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];
}
Это вызовет проблему, заключающуюся в том, что если я хочу изменить текст метки на полученную строку, код не может быть записан в IBAction 'accept', но должен быть записан в методе didReceiveData следующим образом:
MainViewController *mainView = [[MainViewController alloc] initWithNibName:@"MainView" bundle:nil];
AMEAppDelegate *delegate = [[UIApplication sharedApplication] delegate];
[delegate.navController pushViewController:mainView animated:YES];
mainView.labelStr.text = ReturnStr;
Еще одна проблема заключается в том, что данные в MainView будут перезаписаны, если я инициализирую MainView в «didReceiveData». Можно ли изменить текст labelStr без инициализации MainView?