【发布时间】:2015-12-29 05:16:33
【问题描述】:
我有一个 NSTextField 的子类,我设置了 LineBreakMode。
它在我的 Mac 和 Yosemite 下运行良好 我的一位用户在 Mavericks 上的崩溃
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[XTextField setLineBreakMode:]: unrecognized selector sent to instance 0x7fc784548ad0'
这一轮我该怎么做?
子类的头文件
#import <Cocoa/Cocoa.h>
@interface XTextField : NSTextField
- (void)setText:(NSString *)text
@end
实施
#import "XTextField.h"
@implementation XTextField
- (void)setText:(NSString *)text
{
if (text)
{
[self setStringValue:text];
}
else
{
[self setStringValue:@""];
}
}
- (instancetype)initWithFrame:(NSrect)frame
{
if(self = [super initWithFrame:frame])
{
[self setEditable:NO];
[self setSelectable:NO];
[self setDrawsBackGround:NO];
[self setBezeled:NO];
}
return self;
}
@end
调用代码:
XTextField* myLabel = [[XTextField alloc]initWithFrame:myFrame];
[myLabel settext:@"text text text"];
[myLabel setLineBreakMode:NSLineBreakByTruncatingTail];
【问题讨论】:
-
您是否检查了您的出口是否有文本字段...并发布了一些代码
-
@EICaptain 我没有网点,它是通过编程方式制作的 NSTextFieldSubClass
-
@EICaptain 我发布了崩溃的代码行还有什么代码要发布?
NSTextFieldSubClass是一个简单的子类,它只将方法setStringValue重命名为setText -
您能否编辑您的问题以显示您如何声明“
NSTextFieldSubClass”(例如 .h 文件的内容和/或“@interface”的外观)。此外,子类应该永远以“NS”开头,因为这可能会使其他人在查看您的代码时误以为它是 Apple 提供的 iOS SDK 类。 -
@MichaelDautermann 当然,请稍等。 (P.S. 它不是以“
NS”开头的,我在这里重命名它是为了说明它是NSTextField的子类
标签: objective-c macos cocoa crash nstextfield