使用NSString(NSExtendedStringDrawing)drawWithRect:options:attributes:context自ios7.1以来的随机崩溃
我的一些用户报告说,他们在ios7.1上升级设备后,按下应用程序中的“搜索按钮”,系统崩溃。 不幸的是,我无法在运行ios7.1或7.1.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
- (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%)应用程序崩溃。但这是提供有价值的信息的唯一方法,比如完整的调用堆栈