使用NSString(NSExtendedStringDrawing)drawWithRect:options:attributes:context自ios7.1以来的随机崩溃

使用NSString(NSExtendedStringDrawing)drawWithRect:options:attributes:context自ios7.1以来的随机崩溃,ios,crash-reports,crash-dumps,ios7.1,Ios,Crash Reports,Crash Dumps,Ios7.1,我的一些用户报告说,他们在ios7.1上升级设备后,按下应用程序中的“搜索按钮”,系统崩溃。 不幸的是,我无法在运行ios7.1或7.1.1的设备上重现此错误 代码如下: - (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar { [searchBar resignFirstResponder]; if (searchBar.text.length > 0) { [self loa

我的一些用户报告说,他们在ios7.1上升级设备后,按下应用程序中的“搜索按钮”,系统崩溃。 不幸的是,我无法在运行ios7.1或7.1.1的设备上重现此错误

代码如下:

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {
    [searchBar resignFirstResponder];

    if (searchBar.text.length > 0)
    {
        [self loadingStartAnimating];
        [NSThread detachNewThreadSelector:@selector(updateSearchTable:) toTarget:self withObject:nil];  
    }   
}



-(void)updateSearchTable:(id)data
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    [searchViewController updateWithString:[self cleanString:theSearchBar.text]];
    [pool release];
}
在使用包含表视图的xib构建的searchViewController中:

-(void)updateWithString:(NSString*)searchText
{
    [self.searchWikiList removeAllObjects];

    SQLManager *sq = [[SQLManager alloc] initDatabase];
    self.searchWikiList = [sq allocWikisFromDatabase:searchText mode:2];
        [sq release];

    [self.iPadSearchTableView reloadData];
    [self.iPadSearchTableView setContentOffset:CGPointMake(0, 0) animated:NO];
    [self.view setHidden:NO];
    [self.iPadViewController loadingStopAnimating];

}
一个用户已经发送了以下我已经标记的崩溃日志。有人能帮我弄清楚发生了什么事吗

我不明白的是,这是一个“doesNotRecognizeSelector”异常,但在“OS”代码中(当然,我不是自己编写的)。也许xib文件中的某个地方有错误

Thread 14 Crashed:
0   libsystem_c.dylib               0x3b75206b __abort + 103
1   libsystem_c.dylib               0x3b752001 abort + 85
2   libc++abi.dylib                 0x3aba098b abort_message + 71
3   libc++abi.dylib                 0x3abb96e3 default_terminate_handler() + 251
4   libobjc.A.dylib                 0x3b1ecf7b _objc_terminate() + 191
5   libc++abi.dylib                 0x3abb71b1 std::__terminate(void (*)()) + 77
6   libc++abi.dylib                 0x3abb6a05 __cxa_throw + 113
7   libobjc.A.dylib                 0x3b1ecdb7 objc_exception_throw + 247
8   CoreFoundation                  0x3061c833 -[NSObject(NSObject) doesNotRecognizeSelector:] + 199
9   CoreFoundation                  0x3061b12b ___forwarding___ + 703
10  CoreFoundation                  0x3056a0d4 __forwarding_prep_0___ + 20
11  UIFoundation                    0x384fe911 __NSStringDrawingEngine + 12249
12  UIFoundation                    0x384fb85f -[NSString(NSExtendedStringDrawing) drawWithRect:options:attributes:context:] + 147
13  UIKit                           0x32e612c5 -[UILabel _drawTextInRect:baselineCalculationOnly:] + 4221
14  UIKit                           0x32ec7705 -[UILabel drawTextInRect:] + 497
15  UIKit                           0x32ec7507 -[UILabel drawRect:] + 75
16  UIKit                           0x32ec74a5 -[UIView(CALayerDelegate) drawLayer:inContext:] + 369
17  QuartzCore                      0x32af3185 -[CALayer drawInContext:] + 97
18  QuartzCore                      0x32adcc59 CABackingStoreUpdate_ + 1857
19  QuartzCore                      0x32bb8c19 ___ZN2CA5Layer8display_Ev_block_invoke + 49
20  QuartzCore                      0x32adc509 x_blame_allocations + 81
21  QuartzCore                      0x32adc1bb CA::Layer::display_() + 1115
22  QuartzCore                      0x32abfd3d CA::Layer::display_if_needed(CA::Transaction*) + 205
23  QuartzCore                      0x32abf9d5 CA::Layer::layout_and_display_if_needed(CA::Transaction*) + 21
24  QuartzCore                      0x32abf3e1 CA::Context::commit_transaction(CA::Transaction*) + 225
25  QuartzCore                      0x32abf1f3 CA::Transaction::commit() + 311
26  QuartzCore                      0x32aec8df CA::Transaction::release_thread(void*) + 159
27  libsystem_pthread.dylib         0x3b8076cf _pthread_tsd_cleanup + 163
28  libsystem_pthread.dylib         0x3b80744f _pthread_exit + 83
29  libsystem_pthread.dylib         0x3b8081b5 pthread_exit + 25
30  Foundation                      0x30f556ff +[NSThread exit] + 7
31  Foundation                      0x31001a29 __NSThread__main__ + 1089
32  libsystem_pthread.dylib         0x3b808957 _pthread_body + 139
33  libsystem_pthread.dylib         0x3b8088c7 _pthread_start + 99
34  libsystem_pthread.dylib         0x3b806ae4 thread_start + 4

这种情况在iOS 7.1/7.11的生产设备上也会发生,主要是在iPhone4/4S上(但不仅如此)

异常的原因总是
-[\u UIFontCacheKey set]:无法识别的选择器发送到实例0x1551b0a0
,请参阅下面的调用堆栈

当它发生时,它总是在同一个地方——当应用程序使用背景线程重新绘制视图时。正如@iosdev所指出的,也许这确实与此有关

#0  CoreFoundation                      0030449F0B <redacted>()
#1  libobjc.A.dylib                     003ABE0CE7 objc_exception_throw()
#2  CoreFoundation                      003044D837 -[NSObject doesNotRecognizeSelector:]
#3  CoreFoundation                      003044C137 <redacted>()
#4  CoreFoundation                      003039B098 _CF_forwarding_prep_0()
#5  UIFoundation                        00380C83FD <redacted>()
#6  UIFoundation                        00380C6863 -[NSString drawWithRect:options:attributes:context:]
#7  UIKit                               0032C922C9 -[UILabel _drawTextInRect:baselineCalculationOnly:]
#8  UIKit                               0032CF8709 -[UILabel drawTextInRect:]
#9  UIKit                               0032CF850B -[UILabel drawRect:]
#10 UIKit                               0032CF84A9 -[UIView drawLayer:inContext:]
#11 QuartzCore                          0032924189 -[CALayer drawInContext:]
#12 QuartzCore                          003290DC5B <redacted>()
#13 QuartzCore                          00329E9C1D <redacted>()
#14 QuartzCore                          003290D50B <redacted>()
#15 QuartzCore                          003290D1BF <redacted>()
#16 QuartzCore                          00328F0D41 <redacted>()
#17 QuartzCore                          00328F09D9 <redacted>()
#18 QuartzCore                          00328F03E5 <redacted>()
#19 QuartzCore                          00328F01F7 <redacted>()
#20 QuartzCore                          00328E9F1D <redacted>()
#21 CoreFoundation                      0030415039 <redacted>()
#22 CoreFoundation                      00304129C7 <redacted>()
#23 CoreFoundation                      0030412D13 <redacted>()
#24 CoreFoundation                      003037D769 CFRunLoopRunSpecific()
#25 CoreFoundation                      003037D54B CFRunLoopRunInMode()
#26 GraphicsServices                    00352EA6D3 GSEventRunModal()
#27 UIKit                               0032CDC891 UIApplicationMain()
#28 myApp                               00000633AB main()
#29 libdyld.dylib                       003B0DEAB7 <redacted>()
#0 CoreFoundation 0030449F0B()
#1 libobjc.A.dylib 003ABE0CE7 objc_异常_抛出()
#2 CoreFoundation 003044D837-[NSObject未识别选择器:]
#3芯基础003044C137()
#4 CoreFoundation 003039B098 _CF_转发_准备_0()
#5 UI00380C83FD()
#6 UI00380C6863-[NSString drawWithRect:选项:属性:上下文:]
#7 UIKit 0032C922C9-[UILabel\u drawTextInRect:仅基线计算:]
#8 UIKit 0032CF8709-[UILabel drawTextInRect:]
#9 UIKit 0032CF850B-[UILabel drawRect:]
#10 UIKit 0032CF84A9-[UIView绘图层:inContext:]
#11夸脱芯0032924189-[CALayer drawInContext:]
#12夸脱芯003290DC5B()
#13夸脱芯00329E9C1D()
#14夸脱芯003290D50B()
#15夸脱芯003290D1BF()
#16夸脱芯00328F0D41()
#17夸脱芯00328F09D9()
#18夸脱芯00328F03E5()
#19夸脱芯00328F01F7()
#20夸脱芯00328E9F1D()
#21芯基础0030415039()
#22核心基础00304129C7()
#23芯基础0030412D13()
#24 CoreFoundation 003037D769 CFRunLoopRunSpecific()
#25 CoreFoundation 003037D54B CFRunLoopRunInMode()
#26图形服务00352EA6D3 GSEventRunModal()
#27 UIKit 0032CDC891 UIApplicationMain()
#28 myApp 00000633AB主管道()
#29 libdyld.dylib 003B0DEAB7()

我也有同样的问题。我通过删除项目的临时文件和派生数据来修复它

1。在窗口->管理器->项目中,选择项目的派生数据并单击“删除”。
2.删除设备/模拟器上的项目应用程序。
3.按“Command+Shift+K”清理项目。
4.重新启动Xcode。

我不知道发生了什么,但问题不知怎么解决了


希望这有帮助。

通过添加一些代码来详细说明您的问题。它在哪里崩溃?用户按下搜索按钮后,会调用很多代码:应用程序查看本地数据库,创建一个结果数组,并用这些结果填充UITableView。我从崩溃日志中了解到,它在我编写的某些代码中不会崩溃。对吗?我加了密码。主线程中的SearchTable未更新。显然不建议这样做,但这就是问题所在吗?您应该更新主线程中的所有UI操作。特别是文本字段和搜索栏幸运的是,我不能让应用程序在运行ios 7.1和7.1.1的测试设备上崩溃。只有少数运行7.1Right的用户(可能10%)应用程序崩溃。但这是提供有价值的信息的唯一方法,比如完整的调用堆栈