2012-11-12 36 views
0

我有一个与UILabel有关的奇怪的崩溃,但我使用的崩溃报告服务并没有给我很多帮助来找到它。我无法知道哪个控制器和哪个UILabel正在造成它。我唯一的帮助是:UILabel [__NSCFString set]:无法识别的选择器发送到实例崩溃

-[__NSCFString set]: unrecognized selector sent to instance 0x1e0958d0 
0 CoreFoundation  __exceptionPreprocess + 162 
1 libobjc.A.dylib objc_exception_throw + 30 
2 CoreFoundation  -[NSObject(NSObject) doesNotRecognizeSelector:] + 170 
3 CoreFoundation  ___forwarding___ + 392 
4 CoreFoundation  _CF_forwarding_prep_0 + 24 
5 UIKit    -[UILabel _legacy_drawTextInRect:baselineCalculationOnly:] + 2632 
6 UIKit    -[UILabel _drawTextInRect:baselineCalculationOnly:] + 166 
7 UIKit    -[UILabel drawTextInRect:] + 450 
8 UIKit    -[UILabel drawRect:] + 72 
9 UIKit    -[UIView(CALayerDelegate) drawLayer:inContext:] + 364 
10 QuartzCore   -[CALayer drawInContext:] + 112 
11 QuartzCore   CABackingStoreUpdate_ + 1808 
12 QuartzCore   CA::Layer::display_() + 980 
13 QuartzCore   CA::Layer::display_if_needed(CA::Transaction*) + 202 
14 QuartzCore   CA::Layer::layout_and_display_if_needed(CA::Transaction*) + 24 
15 QuartzCore   CA::Context::commit_transaction(CA::Transaction*) + 238 
16 QuartzCore   CA::Transaction::commit() + 316 
17 QuartzCore   CA::Transaction::observer_callback(__CFRunLoopObserver*, unsigned long, void*) + 60 
18 CoreFoundation  __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 20 
19 CoreFoundation  __CFRunLoopDoObservers + 276 
20 CoreFoundation  __CFRunLoopRun + 742 
21 CoreFoundation  CFRunLoopRunSpecific + 356 
22 CoreFoundation  CFRunLoopRunInMode + 104 
23 GraphicsServices GSEventRunModal + 74 
24 UIKit    UIApplicationMain + 1120 
25 App    main.m line 14 
26 App    start + 40 

有什么我可以找到我的方式通过这个?感谢提前!

+1

尝试制定一个突破点,例外“全部”,打破“抛出”这将崩溃之前打破权利。 –

+0

问题是我无法在调试模式下重现它。此报告来自生产应用程序中的崩溃报告服务。 – ozzotto

回答

0

在您的项目中搜索“set”“,那么您可能已经找到它了,因为这是一个非常典型的方法名称。如果没有帮助,请使用NSLog将您的所有标签地址打印到您的控制台,以找出哪个标签导致此问题。像

for (UIView *sub in self.subviews) 
    if ([sub kindOfClass:[UILabel class]]) NSLog(@"%p", sub); 

1

你可以尝试把这个在.h(未测试的代码,如有必要,正确的拼写):

@interface NSString (extended) 
- (void)set; 
@end 

这在.M:

@implementation NSString (extended) 
- (void)set 
{ 
    NSLog(@"[NSString set] ??? impossible !!!"); 
} 
@end 

然后在这个方法上设置一个断点。

1

尽管这是一个老问题,对任何人都遇到类似的问题:

如果你在你的UILabel使用attributedText,检查你设置的属性值类型。例如:

NSString* s = @"str"; 
NSMutableAttributedString* as = [[NSMutableAttributedString alloc] initWithString:s]; 
[as addAttribute:NSForegroundColorAttributeName value:someObjectThatsNotAUIColor range:NSMakeRange(0, s.length)]; 

会导致UILabel [__NSCFString set]:无法识别的选择器发送到实例崩溃。

相关问题