UILabel [__ NSCFString set]:无法识别的选择器发送到实例崩溃

时间:2012-11-12 14:47:18

标签: objective-c ios xcode uilabel

我遇到了与UILabel相关的奇怪崩溃,但我使用的崩溃报告服务并没有给我很多帮助来找到它。我不知道哪个控制器和哪个UILabel导致它。我唯一的帮助如下:

-[__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

有什么我能找到的吗? Thanx提前!

3 个答案:

答案 0 :(得分:1)

您可以尝试将其放入.h:

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

这是在.m:

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

然后在此方法上设置断点。

答案 1 :(得分:1)

即使这是一个老问题,对于遇到类似问题的人来说也是如此:

如果您在UILabel中使用了attributionText,请检查您正在设置的属性值类型。例如:

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

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

答案 2 :(得分:0)

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

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

(代码未经测试,必要时拼写正确)