Не удается получить NSURLConnection, но приложение продолжает ждать - PullRequest
1 голос
/ 07 ноября 2011

Итак, у меня есть приложение, которое подключается к внутреннему IP-адресу. Поэтому я хочу реализовать код, который обеспечит выполнение NSSURLConnections (т. Е. Подключен к беспроводной сети), поскольку я не смогу подключиться к серверу, если не нахожусь в беспроводной сети. Проблема в том, прежде чем я могу проверить, идет и застревает. Я реализовал

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {

но его никогда не вызывают. Есть идеи, как поступить?

это мой код для создания соединения

NSURL *url = [NSURL URLWithString:@"http://192.168.192.4/file.php"];
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];

после этой последней строки она гаснет в диком синем цвете!

* **** 1014 1015 * UPDATE ***

это метод, который вызывается при нажатии кнопки.

NSURL *url = [NSURL URLWithString:@"http://192.168.192.4/file.php"];
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];

connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];

[request release];
[connection release];

Я также реализовал эти методы:

didFailWithError: (NSError *)

didFinishLoading

didRecieveData

Я только что изменил соединение (неатомное, сохранить) ... для сильного не было опции автозаполнения. какие-нибудь указатели?

Ответы [ 2 ]

2 голосов
/ 07 ноября 2011

в этом случае вы не используете ARC, но у вас есть похожая проблема. вы освобождаете connection сразу после его выделения / инициализации, поэтому соединение никогда не запускается. Удалите [connection release] и освободите его через свойство в двух методах делегата для завершения соединения, как я отмечаю ниже.

ДЛЯ СПРАВКИ: если ваш проект использует ARC, connection будет освобожден сразу после завершения цикла выполнения, поскольку ничто его не удерживает. Попробуйте создать (неатомное, сильное) свойство, чтобы сохранить соединение. Ноль собственности, когда соединение завершено.

в MyClass.h

@property (nonatomic, strong)   NSURLConnection * connection;

в MyClass.m

@implementation MyClass
@synthesize connection;

- (void)requestData
{
    // create request

    self.connection = [NSURLConnection connectionWithRequest:...];

    // in connection delegate method for successful completion or error set self.connection = nil;
}

РЕДАКТИРОВАТЬ: уточненная информация ARC

РЕДАКТИРОВАТЬ # 2: добавлен не дуговой ответ вверху

0 голосов
/ 07 ноября 2011

Возвращаемое соединение не ноль? Вы делаете это в основном потоке или в потоке, снабженном циклом выполнения?

...