Я выполняю запрос NSURL асинхронно. Он работает отлично по большей части, но иногда он возвращает 200 OK
для хостов, которые явно фиктивные. Вот код для подключения:Значения, смешавшиеся в запросе NSURL async
-(void)checkConnectionForHost:(NSString*)host completion:(completion_t)completionHandler
{
NSURLRequest* request = [[NSURLRequest alloc]initWithURL:[NSURL URLWithString:host]];
if([NSURLConnection canHandleRequest:request]){
[NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc]init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
if(completionHandler)
{
completionHandler(connectionError == nil && [(NSHTTPURLResponse*)response statusCode]==200);
}
}];
}
}
И обработчик завершения:
typedef void (^completion_t)(BOOL isReachable);
Я звоню эту команду для каждой ячейки в моем источнике данных в методе collectionView:cellForItem...
делегата.
Причина, я знаю, что это не работает, потому что я послал в некотором случайном хозяине, как 8107341897309
и он сразу же вернулся 0
статус, но затем изменено на 200
. Кроме того, если я отправляю значение со строкой, он остается 0
. Когда я отправляю значение с целыми или десятичными знаками, это продолжает прыгать. Любое понимание было бы здорово!
EDIT: Поэтому иногда, когда он соединяется, он возвращает 0
, а иногда возвращает 200
. Я пытался сказать, что результаты несовместимы.
EDIT 2: Решил записать результаты, которые я получил в collectionView:cellForItemAtIndexPath
и получил это:
2014-01-04 19:22:53.390 ServerObserver[5624:4703] http://192.168.1.11 is Reachable? : 1. Index: 0
2014-01-04 19:22:53.414 ServerObserver[5624:3707] http://apple.com is Reachable? : 1. Index: 6
2014-01-04 19:22:53.619 ServerObserver[5624:4003] http://192.168.1.11 is Reachable? : 1. Index: 0
2014-01-04 19:22:53.697 ServerObserver[5624:5603] http://google.com is Reachable? : 1. Index: 1
2014-01-04 19:22:53.696 ServerObserver[5624:4003] http://pandora.com is Reachable? : 1. Index: 5
2014-01-04 19:22:53.705 ServerObserver[5624:4003] http://apple.com is Reachable? : 1. Index: 6
2014-01-04 19:22:53.732 ServerObserver[5624:5603] http://reddit.com is Reachable? : 1. Index: 4
2014-01-04 19:22:53.781 ServerObserver[5624:1803] http://google.com is Reachable? : 1. Index: 1
2014-01-04 19:22:53.893 ServerObserver[5624:5603] http://twitter.com is Reachable? : 1. Index: 3
2014-01-04 19:22:53.896 ServerObserver[5624:5603] http://reddit.com is Reachable? : 1. Index: 4
2014-01-04 19:22:53.891 ServerObserver[5624:1803] http://pandora.com is Reachable? : 1. Index: 5
2014-01-04 19:22:54.038 ServerObserver[5624:4003] http://twitter.com is Reachable? : 1. Index: 3
2014-01-04 19:22:54.268 ServerObserver[5624:5603] http://facebook.com is Reachable? : 1. Index: 2
2014-01-04 19:22:54.317 ServerObserver[5624:5603] http://facebook.com is Reachable? : 1. Index: 2
Некоторые вещи, чтобы отметить, что это барахло IP даже не показывает здесь, потому что я проверяю в предыдущем метод, если запрос «может быть сделан». Но почему каждый IP называется дважды? Каждая ячейка имеет только один IP-адрес.
Уход за разъяснением: «сразу же вернулся статус 0, но затем был изменен на 200»? – zaph
Используйте сетевой анализатор, такой как Charles Proxy, чтобы точно видеть, что отправляется и принимается. – zaph
Извините за путаницу, я обновил OP – Carpetfizz