ios: NSURLConnection периодически вылетает - PullRequest
0 голосов
/ 28 марта 2011

У меня случаются случайные сбои EXC_CRASH, и я думаю, что я сузил его до NSURLConnection.Стоит отметить, что я вызываю следующее в фоновом селекторе, может ли это быть проблемой?

Я получаю NSData из следующего метода NSURLConnection:

NSString *urlStr = [NSString stringWithFormat:@"%@",url];
    NSURL *serviceUrl = [NSURL URLWithString:urlStr];
    NSMutableURLRequest *serviceRequest = [NSMutableURLRequest requestWithURL:serviceUrl];
    [serviceRequest setHTTPMethod:@"GET"];
    [serviceRequest setCachePolicy:NSURLRequestUseProtocolCachePolicy];
    [serviceRequest setTimeoutInterval:30.0];

    NSURLResponse *serviceResponse = nil;
    NSError *serviceError = nil;

    // Get the downloaded data
    NSData *returnedData = [NSURLConnection sendSynchronousRequest:serviceRequest returningResponse:&serviceResponse error:&serviceError];

    // Do stuff with returnedData;

Журнал сбоев:

Exception Type:  EXC_CRASH (SIGABRT)
Exception Codes: 0x00000000, 0x00000000
Crashed Thread:  0

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libsystem_kernel.dylib          0x00011a1c __pthread_kill + 8
1   libsystem_c.dylib               0x000333b4 pthread_kill + 52
2   libsystem_c.dylib               0x0002bbf8 abort + 72
3   libstdc++.6.dylib               0x00044a64 __gnu_cxx::__verbose_terminate_handler() + 376
4   libobjc.A.dylib                 0x0000606c _objc_terminate + 104
5   libstdc++.6.dylib               0x00042e36 __cxxabiv1::__terminate(void (*)()) + 46
6   libstdc++.6.dylib               0x00042e8a std::terminate() + 10
7   libstdc++.6.dylib               0x00042f5a __cxa_throw + 78
8   libobjc.A.dylib                 0x00004c84 objc_exception_throw + 64
9   Foundation                      0x0008f924 __NSThreadPerformPerform + 648
10  CoreFoundation                  0x00075a72 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 6
11  CoreFoundation                  0x00077758 __CFRunLoopDoSources0 + 376
12  CoreFoundation                  0x000784e4 __CFRunLoopRun + 224
13  CoreFoundation                  0x00008ebc CFRunLoopRunSpecific + 224
14  CoreFoundation                  0x00008dc4 CFRunLoopRunInMode + 52
15  GraphicsServices                0x00004418 GSEventRunModal + 108
16  GraphicsServices                0x000044c4 GSEventRun + 56
17  UIKit                           0x0002ed62 -[UIApplication _run] + 398
18  UIKit                           0x0002c800 UIApplicationMain + 664
19  PUC                             0x0009e7cc 0x1000 + 645068
20  PUC                             0x0009e780 0x1000 + 644992

Thread 1 name:  Dispatch queue: com.apple.libdispatch-manager
Thread 1:
0   libsystem_kernel.dylib          0x00012fbc kevent + 24
1   libdispatch.dylib               0x00006094 _dispatch_mgr_invoke + 672
2   libdispatch.dylib               0x0000704a _dispatch_queue_invoke + 86
3   libdispatch.dylib               0x0000660a _dispatch_worker_thread2 + 190
4   libsystem_c.dylib               0x0003458a _pthread_wqthread + 258
5   libsystem_c.dylib               0x00034bbc start_wqthread + 0

Thread 2 name:  WebThread
Thread 2:
0   libsystem_kernel.dylib          0x0000fc00 mach_msg_trap + 20
1   libsystem_kernel.dylib          0x0000f758 mach_msg + 44
2   CoreFoundation                  0x000762b8 __CFRunLoopServiceMachPort + 88
3   CoreFoundation                  0x00078562 __CFRunLoopRun + 350
4   CoreFoundation                  0x00008ebc CFRunLoopRunSpecific + 224
5   CoreFoundation                  0x00008dc4 CFRunLoopRunInMode + 52
6   WebCore                         0x0000637a RunWebThread(void*) + 378
7   libsystem_c.dylib               0x0003330a _pthread_start + 242
8   libsystem_c.dylib               0x00034bb4 thread_start + 0

Thread 3:
0   libsystem_kernel.dylib          0x0000fc00 mach_msg_trap + 20
1   libsystem_kernel.dylib          0x0000f758 mach_msg + 44
2   CoreFoundation                  0x000762b8 __CFRunLoopServiceMachPort + 88
3   CoreFoundation                  0x00078562 __CFRunLoopRun + 350
4   CoreFoundation                  0x00008ebc CFRunLoopRunSpecific + 224
5   CoreFoundation                  0x00008dc4 CFRunLoopRunInMode + 52
6   Foundation                      0x0002a7f6 +[NSURLConnection(NSURLConnectionReallyInternal) _resourceLoadLoop:] + 206
7   Foundation                      0x0001d382 -[NSThread main] + 38
8   Foundation                      0x0008f5c6 __NSThread__main__ + 966
9   libsystem_c.dylib               0x0003330a _pthread_start + 242
10  libsystem_c.dylib               0x00034bb4 thread_start + 0

Ответы [ 2 ]

5 голосов
/ 29 марта 2011

Просто используйте ASIHttpRequest, как и все остальные. Легко.

Единственная альтернатива - переписать (абсолютно без причины) 5000 строк кода в ASIHttpRequest.

Это единственное решение.

1 голос
/ 29 марта 2011

+ 1 для ASIHTTPRequest. Кроме того, поскольку вы упомянули, что вы запускаете его в фоновом режиме, проверьте, не запускаете ли вы его случайно в методе dealloc какого-либо контроллера представления.

...