NSURLConnection爆炸与无法识别的选择器

时间:2014-12-17 16:36:55

标签: objective-c cocoa

过去我曾经多次使用过NSURLConnection,它一直都很棒。现在我将它添加到一个新项目中,每次我尝试使用它时都会爆炸。我已经将代码简化为非常非常简单的东西,并且它仍然会爆炸。我只是创建了一个从NSObject派生的对象,并实现了NSURLConnectionDelegate协议。我甚至都不再保存数据了。

这是对象的代码:

@implementation MyTest
{
    NSURLConnection *connection;
    NSURL *url;
    NSURLRequest *request;
}

- (void) tryitout
{
    url = [NSURL URLWithString:@"http://www.yahoo.com"];

    request = [NSURLRequest requestWithURL:url     cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:(NSTimeInterval) 60.0];

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

    if (connection == nil)
        NSLog (@"Can't get an NSURLConnection");
}

- (void)connection:(NSURLConnection *)conn didFailWithError:(NSError *)error
{
    NSLog (@"Error connecting, error is %@", error);
}

- (void)connection:(NSURLConnection *)conn didReceiveResponse:(NSURLResponse *)response
{
    NSLog (@"Got a response");
}

- (void)connection:(NSURLConnection *)conn didReceiveData:(NSData *)data
{
    NSLog (@"Got some data");
}

- (void) connectionDidFinishLoading:(NSURLConnection *)conn
{
    NSLog (@"All done");
}

然后为了对此进行测试,我只是在按下按钮后执行此操作(testObject是一个肯定会挂起的全局变量):

testObject = [[MyTest alloc] init];
dispatch_async(dispatch_get_main_queue(), ^(void){
    [testObject tryitout];
});

现在,在NSURLConnection对象创建(并启动)后不久,我就崩溃了:

2014-12-17 10:12:17.161 TestApp[43359:18903] -[__NSArrayM length]: unrecognized selector sent to instance 0x10331cfd0
2014-12-17 10:12:17.163 TestApp[43359:18903] An uncaught exception was raised
2014-12-17 10:12:17.164 TestApp[43359:18903] -[__NSArrayM length]: unrecognized selector sent to instance 0x10331cfd0
2014-12-17 10:12:17.165 TestApp[43359:18903] (
      0   CoreFoundation                      0x00007fff8a48525c __exceptionPreprocess + 172
      1   libobjc.A.dylib                     0x00007fff8dfade75 objc_exception_throw + 43
      2   CoreFoundation                      0x00007fff8a48812d -[NSObject(NSObject) doesNotRecognizeSelector:] + 205
      3   CoreFoundation                      0x00007fff8a3e3272 ___forwarding___ + 1010
      4   CoreFoundation                      0x00007fff8a3e2df8 _CF_forwarding_prep_0 + 120
      5   CoreFoundation                      0x00007fff8a39ee41 CFURLCreateStringByAddingPercentEscapes + 81
      6   CFNetwork                           0x00007fff830c15f8 _ZL13appendEscapedP10__CFStringPKS_ + 40
      7   CFNetwork                           0x00007fff830c1344 _ZL25initializeUserAgentStringv + 124
      8   libsystem_pthread.dylib             0x00007fff87bc38d6 __pthread_once_handler + 65
      9   libsystem_platform.dylib            0x00007fff871a3156 _os_once + 73
      10  libsystem_pthread.dylib             0x00007fff87bc3875 pthread_once + 57
      11  CFNetwork                           0x00007fff830ac71e cleanUpRequest + 105
      12  CFNetwork                           0x00007fff830ac469 _ZN17HTTPNetConnection19prepareTransmissionEP17HTTPNetStreamInfoP17__CoreWriteStream + 1249
      13  CFNetwork                           0x00007fff830ab66b _ZN13NetConnection7enqueueEPvh + 539
      14  CFNetwork                           0x00007fff830ab3ea _ZN17HTTPNetStreamInfo16_streamImpl_OpenEP13CFStreamErrorPh + 88
      15  CFNetwork                           0x00007fff830ab38d _ZThn120_N17HTTPNetStreamInfo16_streamImpl_OpenEP13CFStreamErrorPh + 13
      16  CFNetwork                           0x00007fff8307c3bc _ZN14CoreStreamBase21_streamInterface_OpenEv + 80
      17  CFNetwork                           0x00007fff830ab0cd _ZN12HTTPProtocol10openStreamEv + 255
      18  CFNetwork                           0x00007fff830aa474 _ZN12HTTPProtocol26useNetConnectionForRequestEP13NetConnectionP15__CFHTTPMessageh + 1750
      19  CFNetwork                           0x00007fff830a9cae _ZN24HTTPConnectionCacheEntry28dispatchConnectionToProtocolEP13NetConnectionP12HTTPProtocolP18HTTPRequestMessageh + 276
      20  CFNetwork                           0x00007fff830a9a6d _ZN24HTTPConnectionCacheEntry34notifyNextProtocolOfOpenConnectionEP13NetConnectionh + 301
      21  CFNetwork                           0x00007fff830a6dbf _ZN24HTTPConnectionCacheEntry25enqueueRequestForProtocolEP12HTTPProtocolP15__CFHTTPMessage + 685
      22  CFNetwork                           0x00007fff830a67bc _ZN19HTTPConnectionCache34_onqueue_enqueueRequestForProtocolEP12HTTPProtocolP15__CFHTTPMessage + 178
      23  CFNetwork                           0x00007fff830a66e1 ___ZN19HTTPConnectionCache25enqueueRequestForProtocolEP12HTTPProtocolP15__CFHTTPMessage_block_invoke + 26
      24  CFNetwork                           0x00007fff8309d1dc ___ZNK17CoreSchedulingSet13_performAsyncEPKcU13block_pointerFvvE_block_invoke + 25
      25  CoreFoundation                      0x00007fff8a381a94 CFArrayApplyFunction + 68
      26  CFNetwork                           0x00007fff8309d0bb _ZN19RunloopBlockContext7performEv + 115
      27  CFNetwork                           0x00007fff8309cf63 _ZN17MultiplexerSource7performEv + 269
      28  CFNetwork                           0x00007fff8309cd92 _ZN17MultiplexerSource8_performEPv + 72
      29  CoreFoundation                      0x00007fff8a3b65b1 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
      30  CoreFoundation                      0x00007fff8a3a7c62 __CFRunLoopDoSources0 + 242
      31  CoreFoundation                      0x00007fff8a3a73ef __CFRunLoopRun + 831
      32  CoreFoundation                      0x00007fff8a3a6e75 CFRunLoopRunSpecific + 309
      33  Foundation                          0x00007fff854dbff7 +[NSURLConnection(Loader) _resourceLoadLoop:] + 348
      34  Foundation                          0x00007fff854dbdfb __NSThread__main__ + 1318
      35  libsystem_pthread.dylib             0x00007fff87bc2899 _pthread_body + 138
      36  libsystem_pthread.dylib             0x00007fff87bc272a _pthread_struct_init + 0
      37  libsystem_pthread.dylib             0x00007fff87bc6fc9 thread_start + 13
      )

看来NSURLConnection正在尝试获取NSString的LENGTH,但是却意外地尝试使用NSMutableArray对象。我的代码在哪里,我有错吗?

如果重要,则在发生initWithRequest调用后大约2秒发生此崩溃。

在我的构建环境中它可能是奇怪的东西吗?对于我的生活,我无法弄清楚为什么这一小段代码会爆炸。

感谢您提前提供任何帮助。

0 个答案:

没有答案