Я пытаюсь создать очень простое приложение, которое подключается к URL-адресу и получает содержимое этого URL-адреса, в данном случае простой XML-документ. Моя проблема в том, что запрос никогда не отправляется.
Я создал новый проект (инструмент Foundation), который запускается из основного файла. Я установил делегат NSURLConnection на себя и реализовал необходимые методы делегата. Проблема в том, что эти методы никогда не вызываются. Неважно, поменяю ли я URL-адрес на какой-нибудь поддельный (как в примере ниже). Мне кажется, что приложение завершает запуск, не отправляя и не дожидаясь ответа. Может быть, мое приложение создает поток для запроса, а затем завершает работу, не дожидаясь ответа? Я знаю, что класс запущен, поскольку я получаю операторы NSLOG, такие как «Созданное соединение», но не получаю операторов NSLOG из методов делегата.
Что мне не хватает?
#import "NetworkController.h"
@implementation NetworkController
- (id)init
{
if(self = [super init])
{
}
return self;
}
- (void)dealloc
{
NSLog(@"Calling dealloc");
[super dealloc];
}
- (void) performConnection
{
NSMutableData *receivedData;
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:
@"http://www.test.php?some variables"]];
NSMutableURLRequest *connectionRequest = [NSMutableURLRequest requestWithURL:url
cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:60.0];
[url release];
NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:connectionRequest delegate:self startImmediately:YES];
if (!theConnection)
{
NSLog(@"Failed to submit request");
}
if(theConnection)
{
receivedData=[[NSMutableData data] retain];
NSLog(@"Created connection.");
NSLog(@"--------- Request submitted ---------");
NSLog(@"receivedData: %@", receivedData);
}
[connectionRequest release];
}
#pragma mark NetworkController Delegate
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
NSLog(@"Received response: %@", response);
NSLog(@"Received response, connection retain count is %d",[connection retainCount]);
}
#pragma mark NetworkController Delegate
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
NSLog(@"Connection received data, retain count: %d", [connection retainCount]);
}
#pragma mark NetworkController Delegate
- (void)connectionDidFinishLoading:(NSURLConnection *)connection{
NSLog(@"finished connection retain count: %d", [connection retainCount]);}
#pragma mark NetworkController Delegate
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
NSLog(@"Error receiving response: %@", error);
[connection release];
}
@end
#import <Foundation/Foundation.h>
#import "NetworkController.h"
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NetworkController *n = [[NetworkController alloc] init];
n.performConnection;
[n release];
// insert code here...
NSLog(@"Hello, World!");
[pool drain];
return 0;
}