Я реализую загрузку данных на сервере сервером, создавая NSOperation и открывая NSURLConnections синхронно.NSURLConnection Crashing
Этот код отлично работал как на симуляторе, так и на устройстве, пока я не добавил индикатор выполнения с уведомлениями, возвращающимися в основной поток.
- (void)start {
// stop execution if it's cancelled
if([self isCancelled]) {
[self willChangeValueForKey:@"isFinished"];
finished = YES;
[self didChangeValueForKey:@"isFinished"];
return;
}
// If the operation is not canceled, begin executing the task.
[self willChangeValueForKey:@"isExecuting"];
[NSThread detachNewThreadSelector:@selector(main) toTarget:selfwithObject:nil];
executing = YES;
[self didChangeValueForKey:@"isExecuting"];
}
Теперь я получаю аварийные сообщения EXC_BAD_ACCESS при синхронном вызове.
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@/index.php", rootURL]];
NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:url];
[urlRequest setHTTPMethod:@"POST"];
[urlRequest setHTTPBody:[bodyString dataUsingEncoding:NSUTF8StringEncoding]];
[[NSURLCache sharedURLCache] removeAllCachedResponses];
[[NSURLCache sharedURLCache] setMemoryCapacity:0];
[[NSURLCache sharedURLCache] setDiskCapacity:0];
NSError *error = nil;
NSURLResponse *response = nil;
receivedData = [[NSURLConnection sendSynchronousRequest:urlRequest returningResponse:&response error:&error] mutableCopy];
StackTrace работает следующим образом:
#0 0x3430debc in objc_msgSend()
#1 0x3136f996 in NSPopAutoreleasePool()
#2 0x31374160 in -[NSAutoreleasePool release]()
#3 0x331a0408 in _UIApplicationHandleEvent()
#4 0x325339c4 in PurpleEventCallback()
#5 0x3147a52a in CFRunLoopRunSpecific()
#6 0x31479c1e in CFRunLoopRunInMode()
#7 0x3314ec08 in -[UIApplication _run]()
#8 0x3314d230 in UIApplicationMain()
#9 0x00002ab0 in main (argc=1, argv=0x2ffff504)
С NSZombieEnabled, я получаю
*** -[NSDateComponents release]: message sent to deallocated instance 0x172fd0
Я знаю, что соединение установлено (посмотрел на логи сервера, и запрос проходит). Объект NSDateComponent не размещается нигде в коде NSOperation до NSURLConnection.
Я пытался выяснить, что я неожиданно сделал с NSURLConnection, чтобы он меня так ненавидел.
Любая помощь очень ценится!
Просто попробовал использовать ASIHTTPRequest, и при попытке распаковать мои данные ответа возникают ошибки. Никогда не случалось с NSURLConnection. – serpah