好的,我对错误表示反对:
错误:参数的类型不兼容 'initWithFrame:'
中的1个
这就是导致它的原因:
operationLabel = [[NSTextField alloc] initWithFrame:CGRectMake(0, self.frame.size.height / 2 - (40 * 3), self.frame.size.width, 100)];
定义是:
- (id)initWithFrame:(NSRect)frameRect;
所以第一个参数是NSRect,让我们检查一下:
typedef CGRect NSRect;
怎么会导致错误? 它们的名称相同,类型相同!
答案 0 :(得分:11)
除了zoul的回答,我还以为我会提到Apple的两个辅助函数(宏?)(从10.5开始):
NSRect NSRectFromCGRect(CGRect cgrect)
CGRect NSRectToCGRect(NSRect nsrect)
答案 1 :(得分:9)
NSRect
与CGRect
的类型相同,如果为iOS构建,对于64位Mac架构,或者将具有宏NS_BUILD_32_LIKE_64
的32位Mac架构定义为1在命令行或前缀标题中。
或者,引用NSGeometry.h:
#if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
答案 2 :(得分:3)
您从哪里获得NSRect
的typedef定义?根据文档NSRect
定义如下:
typedef struct _NSRect {
NSPoint origin;
NSSize size;
} NSRect;
换句话说,它的结构看起来就像CGRect
(但不是普通的typedef
)。已经写了一些关于conversions between CGRect and NSRect的文章。