gpt4 book ai didi

ios - NSURLConnection发生无法解释的崩溃

转载 作者:行者123 更新时间:2023-12-03 16:10:40 24 4
gpt4 key购买 nike

我遇到以下崩溃:

Exception Type:  00000020
Exception Codes: 0x000000008badf00d
Highlighted Thread: 0

Application Specific Information:
com.[app name].[app name] failed to scene-update in time

Elapsed total CPU time (seconds): 5.050 (user 5.050, system 0.000), 24% CPU
Elapsed application CPU time (seconds): 0.044, 0% CPU

Thread 0 name: Dispatch queue: com.apple.main-thread
Thread 0:
0 libsystem_kernel.dylib 0x0000000195018e48 semaphore_wait_trap + 8
1 libdispatch.dylib 0x0000000194efbf3c _dispatch_semaphore_wait_slow + 252
2 CFNetwork 0x00000001832a2220 CFURLConnectionSendSynchronousRequest + 284
3 CFNetwork 0x00000001832c27c8 +[NSURLConnection sendSynchronousRequest:returningResponse:error:] + 116
4 Foundation 0x0000000184726358 -[NSData(NSData) initWithContentsOfURL:options:error:] + 308
5 Foundation 0x0000000184726204 +[NSData(NSData) dataWithContentsOfURL:options:error:] + 72
6 [app name] 0x00000001000b1a30 0x100090000 + 137776
7 [app name] 0x00000001001e3f44 0x100090000 + 1392452
8 libdispatch.dylib 0x0000000194eed990 _dispatch_call_block_and_release + 20
9 libdispatch.dylib 0x0000000194eed950 _dispatch_client_callout + 12
10 libdispatch.dylib 0x0000000194ef2208 _dispatch_main_queue_callback_4CF + 1604
11 CoreFoundation 0x00000001838962e8 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 8
12 CoreFoundation 0x0000000183894390 __CFRunLoopRun + 1488
13 CoreFoundation 0x00000001837c11f0 CFRunLoopRunSpecific + 392
14 GraphicsServices 0x000000018cae36f8 GSEventRunModal + 164
15 UIKit 0x0000000188152108 UIApplicationMain + 1484
16 [app name] 0x00000001000dd2ac 0x100090000 + 316076
17 libdyld.dylib 0x0000000194f1aa04 start + 0

在以下代码上:
    @try {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0ul), ^(void) {
NSData* data = [NSData dataWithContentsOfURL:xxxxxxx options:NSDataReadingUncached error:&error];
...
[self.buffer performSelectorOnMainThread:@selector(addObject:) withObject:data waitUntilDone:YES];
}
@catch (NSException* error) {
NSLog(@"error: %@", error);
}

是的,也有一个失败块,但我将代码简化为本质,这是导致崩溃的纯代码。

这段代码每小时运行数百次,没有任何问题。但是它时不时地崩溃。总是相同的崩溃(如上述崩溃)。首先,该应用程序冻结,然后崩溃。 catch块从不执行。

performSelectorOnMainThread使用一个对象。然后将该对象(在主线程中)添加到NSMutableArray(self.buffer是NSMutableArray)中。我知道NSMutableArrays不是线程安全的,这就是为什么我在主线程上执行它们。对于waitUntilDone,我使用YES来防止线程在插入对象之前结束。我也没有使用过,但是经常崩溃。

有谁知道为什么会发生这种崩溃?您是否可能有解决方案来防止这种情况发生?

非常感谢。

最佳答案

更新UI时,您正在主线程上进行网络I / O。这需要太长时间。不要在主线程上这样做。而是使用异步方式来运行URL提取并缓存结果,以便下次用户界面更新可以使用它。

更多信息:

https://developer.apple.com/library/ios/qa/qa1693/_index.html

关于ios - NSURLConnection发生无法解释的崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29444478/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com