Objective c NSWindow的自定义委托
我想为Objective c NSWindow的自定义委托,objective-c,macos,inheritance,delegates,Objective C,Macos,Inheritance,Delegates,我想为NSWindow创建一个自定义委托。 CustomWindow被子类化以获得有关NSWindowDelegate事件的通知。 现在我想为这个CustomWindow创建delegate 我尝试了以下代码: 海关窗口 @class CustomWindow; @protocol CustomWindowDelegate - (void)method1:(CustomWindow *)sender userInfo:(NSMutableDictionary*) userInfo; - (v
NSWindow
创建一个自定义委托。
CustomWindow被子类化以获得有关NSWindowDelegate
事件的通知。
现在我想为这个CustomWindow
创建delegate
我尝试了以下代码:
海关窗口
@class CustomWindow;
@protocol CustomWindowDelegate
- (void)method1:(CustomWindow *)sender userInfo:(NSMutableDictionary*) userInfo;
- (void)method2:(CustomWindow *)sender event:(NSEvent *)theEvent;
- (void)method3:(CustomWindow *)sender;
@end
@interface CustomWindow : NSWindow <NSWindowDelegate>
@property (nonatomic) id <CustomWindowDelegate> delegate;
@end
mainDocument.m
#import "mainDocument.h"
@implementation mainDocument
- (void)method1:(CustomWindow *)sender userInfo:(NSMutableDictionary*) userInfo
{
...
...
}
- (void)method2:(CustomWindow *)sender event:(NSEvent *)theEvent
{
...
...
}
- (void)method3:(CustomWindow *)sender
{
...
...
}
@end
其工作符合预期,但发出以下警告:
属性“delegate”的“retain(或strong)”属性与从“NSWindow”继承的属性不匹配
属性“委托”上的“原子”属性与从“NSWindow”继承的属性不匹配
属性类型“id”与从“NSWindow”继承的类型“id\u Nullable”不兼容
自动属性合成不会合成属性“委托”;它将由它的超类实现,使用@dynamic来确认意图
我怎样才能摆脱这些警告
非常感谢您的帮助。
NSWindow
已经有了一个委托
属性,它将委托用于不同的目的,而不是您的目的。这些错误是委托
属性的声明与继承属性的声明之间的冲突
最简单的解决方案是将属性重命名为customDelegate
或类似的名称。此外,一般惯例是委托属性为弱
,因此您可能也应该将自己的属性声明为弱
通常,可以将新的委托协议与NSWindowDelegate
组合,并重新使用现有的delegate
属性。但是,在您的情况下,由于您已声明CustomWindow
以符合NSWindowDelegate
,因此您似乎计划将窗口对象作为自己的委托。因此,这将与这种方法相冲突。但是,为了完整性,如果要这样做,您需要将协议声明为NSWindowDelegate
的扩展:
@protocol CustomWindowDelegate <NSWindowDelegate>
最后,由于您依赖于NSWindow
来实际提供属性的存储和访问方法,因此您可以通过将其放入CustomWindow的@实现中来修复最后一个警告:
@dynamic delegate;
谢谢“可以将新的委托协议与NSWindowDelegate
组合并重新使用现有委托属性”的第二个选项适用于我
@property (nullable, assign) id<CustomWindowDelegate> delegate;
@dynamic delegate;