objective-c - Cocoa 中未调用我的委托(delegate)操作

标签 objective-c ios cocoa-touch macos cocoa

我有一个类有它的委托(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/

相关文章:

iphone - init中使用loadNibNamed时,ViewController收不到viewDidLoad事件

objective-c - 使用用 Objective c 编写的 XCTest 为 swift 类编写测试

ios - Swift-Firebase 多个观察者

ios - XCode 8.1 更新框架不起作用

iphone - ios4 中不显示外部视频

ios - 带有图像背景的 iOS 7 中的 UITableViewCell 问题

objective-c - 核心数据返回 NSManagedObject 而不是具体类,但仅在使用 .访问器(accessor)

objective-c - 重用代码时预期的标识符和 ARC 问题

ios - 如何在 iOS 中导出具有效果的音频文件

ios - Realm 在后台线程上获取对象并传递给主线程