HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – 滚动浏览UITableView只会在iPhone 5C上导致异常和崩溃大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
用户过快地滚动我的UITableView或点击状态栏跳转到表格顶部时,会抛出异常.我只是在iPhone 5C设备上看到这次崩溃.我无法在4S,5或32位模拟器上重现它.

使用“All Exceptions”断点,我能够打印掉所有可以通过崩溃递增帧指针的回溯.因为在回溯中没有我的应用程序的痕迹(除了主要),我认为这是一个Apple bug,与[NSRLEArray objectATindex:effectiveRange:]有关. this问题的作者似乎与OS X应用程序有相同的问题,并且评论建议查看我的应用程序中的NSAttributedString用法.我在表视图单元格中使用NSAttributedStrings来超链接UITextView中的某些字符串.但如果它是NSAttributedString的一般问题,这不会导致其他iOS设备崩溃吗?

回溯:

(lldb) bt
* thread #1: tid = 0x2e57bd,0x3978e6a0 libobjc.A.dylib`objc_exception_throw,queue = 'com.apple.main-thread',stop reason = breakpoint 1.1
    frame #0: 0x3978e6a0 libobjc.A.dylib`objc_exception_throw
    frame #1: 0x2f431dc4 CoreFoundation`+[NSException raise:format:] + 112
    frame #2: 0x2fd55230 Foundation`-[NSRLEArray objectATindex:effectiveRange:] + 120
    frame #3: 0x2fd71d76 Foundation`-[NSConcreteMutableAttributedString addAttribute:value:range:] + 198
    frame #4: 0x36d7b278 UIFoundation`__50-[NSConcreteTextStorage addAttribute:value:range:]_block_invoke + 156
    frame #5: 0x36d7b102 UIFoundation`-[NSConcreteTextStorage addAttribute:value:range:] + 170
    frame #6: 0x337fc02e DataDetectorsUI`-[DDTextKitOperation _addResultsToAttributes] + 266
    frame #7: 0x337fc1d6 DataDetectorsUI`__46-[DDTextKitOperation doURLificationOnDocument]_block_invoke_2 + 26
    frame #8: 0x36d79a5e UIFoundation`-[NSTextStorage(ActorSupport) coordinateAccess:] + 34
    frame #9: 0x337fc1b8 DataDetectorsUI`__46-[DDTextKitOperation doURLificationOnDocument]_block_invoke + 116
    frame #10: 0x39c78bde libdispatch.dylib`_dispatch_barrier_sync_f_slow_invoke + 66
    frame #11: 0x39c730ae libdispatch.dylib`_dispatch_client_callout + 22
    frame #12: 0x39c759a8 libdispatch.dylib`_dispatch_main_queue_callBACk_4CF + 268
    frame #13: 0x2f3fc5b0 CoreFoundation`__CFRUNLOOP_IS_serviCING_THE_MAIN_DISPATCH_QUEUE__ + 8
    frame #14: 0x2f3fae7c CoreFoundation`__CFRunLoopRun + 1308
    frame #15: 0x2f365470 CoreFoundation`CFRunLoopRunSpecific + 524
    frame #16: 0x2f365252 CoreFoundation`CFRunLoopRunInMode + 106
    frame #17: 0x3409f2ea Graphicsservices`GSEventRunModal + 138
    frame #18: 0x31c1a844 UIKit`UIApplicationMain + 1136
  * frame #19: 0x000bffb4 [AppName]`main(argc=1,argv=0x27d4eceC) + 116 at main.m:16
(lldb) bt
* thread #1: tid = 0x2e57bd,0x39153994 libc++abi.dylib`__cxa_throw,stop reason = breakpoint 1.2
    frame #0: 0x39153994 libc++abi.dylib`__cxa_throw
    frame #1: 0x3978e79a libobjc.A.dylib`objc_exception_throw + 250
    frame #2: 0x2f431dc4 CoreFoundation`+[NSException raise:format:] + 112
    frame #3: 0x2fd55230 Foundation`-[NSRLEArray objectATindex:effectiveRange:] + 120
    frame #4: 0x2fd71d76 Foundation`-[NSConcreteMutableAttributedString addAttribute:value:range:] + 198
    frame #5: 0x36d7b278 UIFoundation`__50-[NSConcreteTextStorage addAttribute:value:range:]_block_invoke + 156
    frame #6: 0x36d7b102 UIFoundation`-[NSConcreteTextStorage addAttribute:value:range:] + 170
    frame #7: 0x337fc02e DataDetectorsUI`-[DDTextKitOperation _addResultsToAttributes] + 266
    frame #8: 0x337fc1d6 DataDetectorsUI`__46-[DDTextKitOperation doURLificationOnDocument]_block_invoke_2 + 26
    frame #9: 0x36d79a5e UIFoundation`-[NSTextStorage(ActorSupport) coordinateAccess:] + 34
    frame #10: 0x337fc1b8 DataDetectorsUI`__46-[DDTextKitOperation doURLificationOnDocument]_block_invoke + 116
    frame #11: 0x39c78bde libdispatch.dylib`_dispatch_barrier_sync_f_slow_invoke + 66
    frame #12: 0x39c730ae libdispatch.dylib`_dispatch_client_callout + 22
    frame #13: 0x39c759a8 libdispatch.dylib`_dispatch_main_queue_callBACk_4CF + 268
    frame #14: 0x2f3fc5b0 CoreFoundation`__CFRUNLOOP_IS_serviCING_THE_MAIN_DISPATCH_QUEUE__ + 8
    frame #15: 0x2f3fae7c CoreFoundation`__CFRunLoopRun + 1308
    frame #16: 0x2f365470 CoreFoundation`CFRunLoopRunSpecific + 524
    frame #17: 0x2f365252 CoreFoundation`CFRunLoopRunInMode + 106
    frame #18: 0x3409f2ea Graphicsservices`GSEventRunModal + 138
    frame #19: 0x31c1a844 UIKit`UIApplicationMain + 1136
  * frame #20: 0x000bffb4 [AppName]`main(argc=1,stop reason = breakpoint 1.1
    frame #0: 0x3978e6a0 libobjc.A.dylib`objc_exception_throw
    frame #1: 0x2f431b88 CoreFoundation`-[NSException raise] + 8
    frame #2: 0x36d7b19a UIFoundation`-[NSConcreteTextStorage addAttribute:value:range:] + 322
    frame #3: 0x337fc02e DataDetectorsUI`-[DDTextKitOperation _addResultsToAttributes] + 266
    frame #4: 0x337fc1d6 DataDetectorsUI`__46-[DDTextKitOperation doURLificationOnDocument]_block_invoke_2 + 26
    frame #5: 0x36d79a5e UIFoundation`-[NSTextStorage(ActorSupport) coordinateAccess:] + 34
    frame #6: 0x337fc1b8 DataDetectorsUI`__46-[DDTextKitOperation doURLificationOnDocument]_block_invoke + 116
    frame #7: 0x39c78bde libdispatch.dylib`_dispatch_barrier_sync_f_slow_invoke + 66
    frame #8: 0x39c730ae libdispatch.dylib`_dispatch_client_callout + 22
    frame #9: 0x39c759a8 libdispatch.dylib`_dispatch_main_queue_callBACk_4CF + 268
    frame #10: 0x2f3fc5b0 CoreFoundation`__CFRUNLOOP_IS_serviCING_THE_MAIN_DISPATCH_QUEUE__ + 8
    frame #11: 0x2f3fae7c CoreFoundation`__CFRunLoopRun + 1308
    frame #12: 0x2f365470 CoreFoundation`CFRunLoopRunSpecific + 524
    frame #13: 0x2f365252 CoreFoundation`CFRunLoopRunInMode + 106
    frame #14: 0x3409f2ea Graphicsservices`GSEventRunModal + 138
    frame #15: 0x31c1a844 UIKit`UIApplicationMain + 1136
  * frame #16: 0x000bffb4 [AppName]`main(argc=1,stop reason = breakpoint 1.2
    frame #0: 0x39153994 libc++abi.dylib`__cxa_throw
    frame #1: 0x3978e79a libobjc.A.dylib`objc_exception_throw + 250
    frame #2: 0x2f431b88 CoreFoundation`-[NSException raise] + 8
    frame #3: 0x36d7b19a UIFoundation`-[NSConcreteTextStorage addAttribute:value:range:] + 322
    frame #4: 0x337fc02e DataDetectorsUI`-[DDTextKitOperation _addResultsToAttributes] + 266
    frame #5: 0x337fc1d6 DataDetectorsUI`__46-[DDTextKitOperation doURLificationOnDocument]_block_invoke_2 + 26
    frame #6: 0x36d79a5e UIFoundation`-[NSTextStorage(ActorSupport) coordinateAccess:] + 34
    frame #7: 0x337fc1b8 DataDetectorsUI`__46-[DDTextKitOperation doURLificationOnDocument]_block_invoke + 116
    frame #8: 0x39c78bde libdispatch.dylib`_dispatch_barrier_sync_f_slow_invoke + 66
    frame #9: 0x39c730ae libdispatch.dylib`_dispatch_client_callout + 22
    frame #10: 0x39c759a8 libdispatch.dylib`_dispatch_main_queue_callBACk_4CF + 268
    frame #11: 0x2f3fc5b0 CoreFoundation`__CFRUNLOOP_IS_serviCING_THE_MAIN_DISPATCH_QUEUE__ + 8
    frame #12: 0x2f3fae7c CoreFoundation`__CFRunLoopRun + 1308
    frame #13: 0x2f365470 CoreFoundation`CFRunLoopRunSpecific + 524
    frame #14: 0x2f365252 CoreFoundation`CFRunLoopRunInMode + 106
    frame #15: 0x3409f2ea Graphicsservices`GSEventRunModal + 138
    frame #16: 0x31c1a844 UIKit`UIApplicationMain + 1136
  * frame #17: 0x000bffb4 [AppName]`main(argc=1,0x39d3e1fc libsystem_kernel.dylib`__pthread_kill + 8,stop reason = signal SIGABRT
    frame #0: 0x39d3e1fc libsystem_kernel.dylib`__pthread_kill + 8
    frame #1: 0x39da5a52 libsystem_pthread.dylib`pthread_kill + 58
    frame #2: 0x39cef02c libsystem_c.dylib`abort + 76
    frame #3: 0x001f32ba [AppName]`uncaught_exception_handler + 26
    frame #4: 0x2f432184 CoreFoundation`__handleUncaughtException + 580
    frame #5: 0x3978e926 libobjc.A.dylib`_objc_terminate() + 174
    frame #6: 0x391541b2 libc++abi.dylib`std::__terminate(void (*)()) + 78
    frame #7: 0x39153d16 libc++abi.dylib`__cxa_rethrow + 102
    frame #8: 0x3978e80e libobjc.A.dylib`objc_exception_rethrow + 42
    frame #9: 0x36d7b150 UIFoundation`-[NSConcreteTextStorage addAttribute:value:range:] + 248
    frame #10: 0x337fc02e DataDetectorsUI`-[DDTextKitOperation _addResultsToAttributes] + 266
    frame #11: 0x337fc1d6 DataDetectorsUI`__46-[DDTextKitOperation doURLificationOnDocument]_block_invoke_2 + 26
    frame #12: 0x36d79a5e UIFoundation`-[NSTextStorage(ActorSupport) coordinateAccess:] + 34
    frame #13: 0x337fc1b8 DataDetectorsUI`__46-[DDTextKitOperation doURLificationOnDocument]_block_invoke + 116
    frame #14: 0x39c78bde libdispatch.dylib`_dispatch_barrier_sync_f_slow_invoke + 66
    frame #15: 0x39c730ae libdispatch.dylib`_dispatch_client_callout + 22
    frame #16: 0x39c759a8 libdispatch.dylib`_dispatch_main_queue_callBACk_4CF + 268
    frame #17: 0x2f3fc5b0 CoreFoundation`__CFRUNLOOP_IS_serviCING_THE_MAIN_DISPATCH_QUEUE__ + 8
    frame #18: 0x2f3fae7c CoreFoundation`__CFRunLoopRun + 1308
    frame #19: 0x2f365470 CoreFoundation`CFRunLoopRunSpecific + 524
    frame #20: 0x2f365252 CoreFoundation`CFRunLoopRunInMode + 106
    frame #21: 0x3409f2ea Graphicsservices`GSEventRunModal + 138
    frame #22: 0x31c1a844 UIKit`UIApplicationMain + 1136
  * frame #23: 0x000bffb4 [AppName]`main(argc=1,argv=0x27d4eceC) + 116 at main.m:16
(lldb) bt
* thread #22: tid = 0x2e57ea,0x39da2cbc libsystem_pthread.dylib`start_wqthread,stop reason = signal SIGABRT
  * frame #0: 0x39da2cbc libsystem_pthread.dylib`start_wqthread

这是我设置属性字符串的地方:

// earlier in the code
tweetTextView.attributedText = [[NSAttributedString alloc] initWithString:tweetTextView.text];
...

-(void)findHashtagsAndAtMentionsInTweetText:(UITextView *)textView {

    NSString *tweetText = textView.text;

    NSError *error = nil;
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(@(\\w+))|(^|\\W)(#|\\uFF03)(\\w*\\p{L}\\w*)" options:0 error:&error];
    NSArray *matches = [regex matchesinstring:tweetText options:0 range:NsmakeRange(0,tweetText.length)];

    NSMutableAttributedString * mytagOrMention = [[NSMutableAttributedString alloc] initWithString:tweetTextView.text];

    for (NSTextcheckingResult *match in matches) {

        NSRange wordRange = [match rangeATindex:0]; // causing crash?
        NSString* word = [tweetText subStringWithRange:wordRange];

        if([word rangeOfString:@"@"].LOCATIOn != NsnotFound) {

            // @ mention

            // remove whitespaces and @
            NSString *formattedTag = [NSString StringWithFormat:@"%@",[[word StringByreplacingoccurrencesOfString:@" " withString:@""] StringByreplacingoccurrencesOfString:@"@" withString:@""]];

            NSString *tweetContets = tweetTextView.text;
            NSRange range = [tweetContets rangeOfString:word];

            if([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"twitter://"]]) {
                NSString *twitterAppURL = [NSString StringWithFormat:@"%@%@",@"twitter://user?screen_name=",formattedTag];
                [mytagOrMention addAttribute:NSLinkAttributENAME value:twitterAppURL range:range];
            } else {

                [mytagOrMention addAttribute:NSLinkAttributENAME value:[NSString StringWithFormat:@"%@%@",@"http://mobile.twitter.com/",formattedTag] range:range];
            }

            tweetTextView.attributedText = mytagOrMention;

        } else {
            // hashtag

            // remove whitespaces and pound
            NSString *formattedTag = [NSString StringWithFormat:@"%@",[[word StringByreplacingoccurrencesOfString:@" " withString:@""] StringByreplacingoccurrencesOfString:@"#" withString:@""]];

            NSString *tweetContets = tweetTextView.text;
            NSRange range = [tweetContets rangeOfString:word];

            [mytagOrMention addAttribute:NSLinkAttributENAME value:[NSString StringWithFormat:@"%@%@%@%@",@"http://twitter.com/search/",@"?q=%23",formattedTag,@"&s=hash"] range:range];

            tweetTextView.attributedText = mytagOrMention;
        }
    }

解决方法

错误不在您发布的代码中.当UITextView在其链接仍在生成时被重用时会发生错误,这是异步完成的.

请参阅这些类似的Stack Overflow问题:

> iOS 7 UITextView link detection crash in UITableView
> UITextViews in a UITableView link detection bug in iOS 7
> UITextView link detection in iOS 7

许多用户报告说,在单元格的prepareForReuse方法中将文本视图的text属性设置为nil可以解决问题.或者,您可以使用TTTAttributedLabel等库而不是文本视图.

它只出现在iPhone 5C上的事实可能是red herring.我打赌这个设备仍在运行iOS 7,其他设备已经更新到更新版本的iOs.

在旁注中,可能存在正则表达式未涵盖的边缘情况.我会删除你的twitter解析方法并将其替换为the official twitter-text-objc library.

大佬总结

以上是大佬教程为你收集整理的ios – 滚动浏览UITableView只会在iPhone 5C上导致异常和崩溃全部内容,希望文章能够帮你解决ios – 滚动浏览UITableView只会在iPhone 5C上导致异常和崩溃所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。