我遇到了与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提前!
答案 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);
(代码未经测试,必要时拼写正确)