我有一个类有它的委托(delegate):
@protocol SNIRCControllerDelegate
- (void) serverTalked:(id)data;
@end
@interface SNIRCController : NSObject <NSStreamDelegate> {
id<SNIRCControllerDelegate> delegate;
}
- (void) setDelegate:(id<SNIRCControllerDelegate>)_delegate;
- (void) test;
@end
实现:
@implementation SNIRCController
- (void) setDelegate:(id<SNIRCControllerDelegate>)_delegate {
_delegate = delegate;
}
- (void) test {
[delegate serverTalked:@"test"];
}
但由于某些原因 [delegate serverTalked:@"test"];
没有调用委托(delegate):/
这就是我在 AppDelegate 上的做法:
@interface AppDelegate : NSObject <NSApplicationDelegate, NSStreamDelegate, SNIRCControllerDelegate> {
IBOutlet NSTextView *logField;
SNIRCController *ircController;
}
@property (assign) IBOutlet NSWindow *window;
-(void)writeToLog:(NSString*)data;
@end
@implementation AppDelegate
@synthesize window = _window;
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
ircController = [[SNIRCController alloc] init];
[ircController setDelegate:self];
[ircController test];
}
- (void) serverTalked:(id)data {
NSLog(@"got called :D");
}
-(void)writeToLog:(NSString*)data {
NSAttributedString *stringToAppend = [[NSAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@\n", data]];
[[logField textStorage] appendAttributedString:stringToAppend];
}
但是 serverTalked:
没有被调用 :( 我做错了什么?
最佳答案
在您的 setDelegate:
实现中,这:
_delegate = delegate;
应该是:
delegate = _delegate;
你搞糊涂了,调换了 ivar 和参数。造成混淆的原因可能是下划线前缀更常用于 ivars。在您的例子中,它是带有下划线前缀的参数。
关于objective-c - Cocoa 中未调用我的委托(delegate)操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7944310/