过去我曾经多次使用过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秒发生此崩溃。
在我的构建环境中它可能是奇怪的东西吗?对于我的生活,我无法弄清楚为什么这一小段代码会爆炸。
感谢您提前提供任何帮助。