【问题标题】:Call NSObject method from NSTextField Subclass?从 NSTextField 子类调用 NSObject 方法?
【发布时间】:2013-06-24 22:09:46
【问题描述】:

我无法从 NSTextField 子类调用外部方法。我有一个 NSTextField 子类,我正在监视文本,当 textDidChange 我正在调用一个属于 NSObject 类的外部方法时。由于某种原因,我的方法没有被调用。我希望有人能解释原因。我的代码如下。谢谢。

编辑:修正了 drawag 建议的代码。

MyTextField.h

#import <Cocoa/Cocoa.h>
@class ObjectController;

@interface MyTextField : NSTextField <NSTextFieldDelegate> {
    ObjectController *objectController;
}
@property (strong, nonatomic) ObjectController *objectController;

@end

MyTextField.m

#import "MyTextField.h"
#import "ObjectController.h"

@implementation MyTextField
@synthesize objectController;

- (void)textDidChange:(NSNotification *)notification{
[objectController methodFromOtherClass];
}

@end

ObjectController.h

#import <Foundation/Foundation.h>
@interface ObjectController : NSObject {

}

- (void)methodFromOtherClass;
@end

ObjectController.m

#import "ObjectController.h"
@implementation ObjectController

- (void) methodFromOtherClass {
NSLog(@"Testing");
}

【问题讨论】:

  • 你应该在你的头部声明ObjectController(不要#import它!)——在你的实现中#import它。
  • 好的,我试试。谢谢。
  • 嗯,我试过你说的,但仍然没有被调用。还有其他建议吗?

标签: objective-c macos cocoa nstextfield nsobject


【解决方案1】:

有两种可能的情况导致此问题:

  1. 调用 textDidChange: 时 objectController 为 nil
  2. textDidChange: 实际上没有被调用,因为您没有正确连接它。

我认为除此之外没有人可以帮助您,因为您没有发布连接代码,也没有在哪里设置 objectController。

【讨论】:

  • textDidChange 被调用。用 NSLOG 测试。我会调查 #1 谢谢。
  • 是的,您对 #1 的看法是正确的。 objectController 在调用时为空。是什么原因造成的?
  • 这并不是导致它为零的原因(在objective-c中它是nil而不是NULL,NULL是别的东西)。那是你没有做任何事情来使它不为零。在不知道您的更高级别目标的情况下,我很难建议它应该如何工作。我需要知道 ObjectController 应该控制什么以及这个文本字段在哪个视图/视图控制器上。
【解决方案2】:

可能忘记将委托分配给 self 或实现 textDidChange 的任何对象?经常发生在我身上。

【讨论】:

    【解决方案3】:

    我通过创建 ObjectController 的实例而不是上述过程解决了这个问题。

    ObjectController *objectController = [ObjectController new];
    [objectController methodFromOtherClass];
    

    【讨论】:

    • 好吧,有点搞定了。该方法调用 NSLog 但它不执行该方法中的其他命令。我很困惑。
    猜你喜欢
    • 1970-01-01
    • 2012-05-03
    • 1970-01-01
    • 1970-01-01
    • 2012-10-06
    • 2013-03-15
    • 2015-12-29
    • 2017-11-09
    • 2011-10-24
    相关资源
    最近更新 更多