gpt4 book ai didi

objective-c - NSString 绘制矩形 :withAttributes: causes 'unrecognized selector sent to instance ...'

转载 作者:搜寻专家 更新时间:2023-10-30 19:54:59 24 4
gpt4 key购买 nike

我遇到了一些非常奇怪的事情:一个方法导致无法识别的选择器发送到实例,但根本没有NSLog()任何东西。

我制作了一个自定义的 NSControl 子类,我尝试在其中绘制我的自定义单元格,如下所示:

- (void)drawRect:(NSRect)dirtyRect {
NSLog(@"DrawRect entered!");
[[NSColor grayColor] set];
[NSBezierPath fillRect:[self bounds]];

unsigned int i, count = [cells count];
NSRect cellRect = NSMakeRect(0, 0, ([self bounds]).size.width, cellHeight);
for (i = 0; i < count; i++) {
NSLog(@"Drawing cell %d at: %@", i, NSStringFromRect(cellRect));
MKMenuCell *cell = [cells objectAtIndex:i];
[cell drawWithFrame:cellRect inView:self];
cellRect.origin.y += cellHeight;
}
}

-[MKMenuCell drawWithFrame:inView:]:

- (void)drawWithFrame:(NSRect)bounds inView:(NSView *)controlView {
NSLog(@"-drawWithFrame:inView:");
NSMutableDictionary *strAttribs = [[NSMutableDictionary alloc] init];
[strAttribs setObject:[NSColor blackColor] forKey:NSFontAttributeName];
[name drawInRect:bounds withAttributes:strAttribs]; // "unrecognized selector sent ..." is caused by this method call.
}

输出:

2013-03-11 18:46:54.823 MacOverflow[738:a0f] DrawRect entered!
2013-03-11 18:46:54.826 MacOverflow[738:a0f] Drawing cell 0 at: {{0, 0}, {176, 30}}
2013-03-11 18:46:54.826 MacOverflow[738:a0f] -drawWithFrame:inView:
2013-03-11 18:46:54.827 MacOverflow[738:a0f] Drawing cell 1 at: {{0, 30}, {176, 30}}
2013-03-11 18:46:54.828 MacOverflow[738:a0f] -drawWithFrame:inView:
2013-03-11 18:46:54.828 MacOverflow[738:a0f] -[NSCachedWhiteColor screenFontWithRenderingMode:]: unrecognized selector sent to instance 0x100512920
2013-03-11 18:46:54.829 MacOverflow[738:a0f] An uncaught exception was raised
2013-03-11 18:46:54.831 MacOverflow[738:a0f] -[NSCachedWhiteColor screenFontWithRenderingMode:]: unrecognized selector sent to instance 0x100512920
2013-03-11 18:46:54.834 MacOverflow[738:a0f] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSCachedWhiteColor screenFontWithRenderingMode:]: unrecognized selector sent to instance 0x100512920'
*** Call stack at first throw:
(
0 CoreFoundation 0x00007fff88c26784 __exceptionPreprocess + 180
1 libobjc.A.dylib 0x00007fff858ddf03 objc_exception_throw + 45
2 CoreFoundation 0x00007fff88c80110 +[NSObject(NSObject) doesNotRecognizeSelector:] + 0
3 CoreFoundation 0x00007fff88bf88ef ___forwarding___ + 751
4 CoreFoundation 0x00007fff88bf4a38 _CF_forwarding_prep_0 + 232
5 AppKit 0x00007fff89afcfae +[NSStringDrawingTextStorage _fastDrawString:attributes:length:inRect:graphicsContext:baselineRendering:usesFontLeading:usesScreenFont:typesetterBehavior:paragraphStyle:lineBreakMode:boundingRect:padding:scrollable:] + 402
6 AppKit 0x00007fff896db539 _NSStringDrawingCore + 1588
7 MacOverflow 0x00000001000159b7 -[MKMenuCell drawWithFrame:inView:] + 229
8 MacOverflow 0x0000000100015f1e -[MKMenuControl drawRect:] + 595
9 AppKit 0x00007fff896d6cc5 -[NSView _drawRect:clip:] + 3390
10 AppKit 0x00007fff896d5938 -[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:] + 1325
11 AppKit 0x00007fff896d5ca2 -[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:] + 2199
12 AppKit 0x00007fff896d5ca2 -[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:] + 2199
13 AppKit 0x00007fff896d5ca2 -[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:] + 2199
14 AppKit 0x00007fff896d400a -[NSView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] + 767
15 AppKit 0x00007fff896d3b2c -[NSThemeFrame _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] + 254
16 AppKit 0x00007fff896d03de -[NSView _displayRectIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:] + 2683
17 AppKit 0x00007fff89649c0e -[NSView displayIfNeeded] + 969
18 AppKit 0x00007fff89611c3b -[NSWindow _reallyDoOrderWindow:relativeTo:findKey:forCounter:force:isModal:] + 1050
19 AppKit 0x00007fff896117d2 -[NSWindow orderWindow:relativeTo:] + 94
20 AppKit 0x00007fff895dd974 -[NSIBObjectData nibInstantiateWithOwner:topLevelObjects:] + 1726
21 AppKiProgram received signal: “SIGABRT”.
t 0x00007fff895dba91 loadNib + 226
22 AppKit 0x00007fff895dafa1 +[NSBundle(NSNibLoading) _loadNibFile:nameTable:withZone:ownerBundle:] + 248
23 AppKit 0x00007fff895dadd9 +[NSBundle(NSNibLoading) loadNibNamed:owner:] + 326
24 AppKit 0x00007fff895d835b NSApplicationMain + 279
25 MacOverflow 0x0000000100000ef9 main + 33
26 MacOverflow 0x0000000100000ed0 start + 52
27 ??? 0x0000000000000001 0x0 + 1
)
terminate called after throwing an instance of 'NSException'

如您所见,调用了 MKMenuCelldrawWithFrame:inView:。但其 NSLog() 语句的输出未显示。这里发生了什么?如何解决?

编辑:我现在意识到,查看 GDB 输出,第一次没有出错。这让它变得更加陌生。

最佳答案

发送的错误选择器 screenFontWithRenderingMode 是 NSFont 上的一个方法。我敢打赌,您不应该为键 NSFontAttributeName 的值设置颜色。您可能应该给它一个字体。

关于objective-c - NSString 绘制矩形 :withAttributes: causes 'unrecognized selector sent to instance ...' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15345251/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com