Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 仅在iPhone 5C上滚动查看UITableView会导致异常和崩溃_Ios_Objective C_Iphone_Uitableview_Nsattributedstring - Fatal编程技术网

Ios 仅在iPhone 5C上滚动查看UITableView会导致异常和崩溃

Ios 仅在iPhone 5C上滚动查看UITableView会导致异常和崩溃,ios,objective-c,iphone,uitableview,nsattributedstring,Ios,Objective C,Iphone,Uitableview,Nsattributedstring,当用户滚动myUITableView过快或点击状态栏跳转到表格顶部时,会引发异常。我只是在iPhone5c设备上看到了这次崩溃。我无法在4S、5或32位模拟器上复制它 使用“All Exceptions”断点,我能够打印出在崩溃期间增加帧指针所能打印出的所有回溯。因为回溯中没有我的应用程序的跟踪(除了主程序),所以我假设这是一个Apple错误,与[NSRLEArray objectAtIndex:effectiveRange:有关。问题的作者似乎在OSX应用程序上也有同样的问题,一条评论建议查看

当用户滚动my
UITableView
过快或点击状态栏跳转到表格顶部时,会引发异常。我只是在iPhone5c设备上看到了这次崩溃。我无法在4S、5或32位模拟器上复制它

使用“All Exceptions”断点,我能够打印出在崩溃期间增加帧指针所能打印出的所有回溯。因为回溯中没有我的应用程序的跟踪(除了主程序),所以我假设这是一个Apple错误,与
[NSRLEArray objectAtIndex:effectiveRange:
有关。问题的作者似乎在OSX应用程序上也有同样的问题,一条评论建议查看我的应用程序中的
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, queue = 'com.apple.main-thread', 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, argv=0x27d4ecec) + 116 at main.m:16
(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: 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, argv=0x27d4ecec) + 116 at main.m:16
(lldb) bt
* thread #1: tid = 0x2e57bd, 0x39153994 libc++abi.dylib`__cxa_throw, queue = 'com.apple.main-thread', 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, argv=0x27d4ecec) + 116 at main.m:16
(lldb) bt
* thread #1: tid = 0x2e57bd, 0x39d3e1fc libsystem_kernel.dylib`__pthread_kill + 8, queue = 'com.apple.main-thread', 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
在其链接仍在生成时被重用时,就会发生错误,这是异步完成的

请参见以下类似的堆栈溢出问题:

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

它只出现在iphone5c上这一事实可能是一个错误。我打赌这台设备仍在运行iOS 7,而其他设备已更新为iOS的更新版本



另一方面,您的正则表达式可能没有涵盖一些边缘情况。我会删除您的twitter解析方法,并将其替换为。

我认为这个问题有价值,应该重新打开。我已经有另一个用户试图联系我关于这个问题的另一个问题:要重新打开它,你应该:包括再现这个崩溃所需的最小数量的代码;将问题从“对这场令人费解的车祸的任何帮助都将非常感激”改为重申您的实际问题。@GeorgeStocker感谢您,并对延迟表示歉意。这是一个我不再参与的老项目,我不得不挖掘代码和QA设备。我对问题进行了编辑,以反映问题发生的代码块。这是一个很好的答案,因此感谢您抽出时间回答此问题。当时所有设备都在运行iOS 7(这是在iOS 8发布之前),我无法在运行iOS 8.1的5C设备上重现崩溃。这是一个非常古老的项目,我们正在迁移到iOS 7 SDK,我怀疑我是否还会继续工作。我现在将这个答案标记为已接受,实施更改,如果有任何其他问题,我将发表评论。再次感谢。@JAL在准备时将文本设置为零是否解决了此问题?