2013-06-24 3 views
0

У меня возникли проблемы с вызовом внешнего метода из подкласса NSTextField. У меня есть подкласс NSTextField, который я контролирую текст, и когда textDidChange я вызываю внешний метод, относящийся к классу NSObject. По какой-то причине мой метод не вызван. Я надеюсь, кто-то сможет объяснить, почему. Мой код ниже. Благодарю.Вызвать метод NSObject из подкласса NSTextField?

РЕДАКТИРОВАТЬ: Исправлен код, предложенный древагом.

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"); 
} 
+0

Вы должны переслать 'ObjectController' в свой заголовок (не' # import' it!) - '# import' его в вашей реализации. –

+0

Хорошо, я попробую. Благодарю. – 0SX

+0

Ну, я попробовал то, что вы сказали, и он по-прежнему не называется. Любые другие предложения? – 0SX

ответ

0

Возможно, забыли назначить делегата себе или другому объекту, который реализует textDidChange? Бывает со мной много.

1

Есть два вероятных сценария, вызывающие эту проблему:

  1. objectController равна нулю, когда textDidChange: называется
  2. textDidChange: не фактически называется потому, что вы не подключили его правильно.

Я не думаю, что кто-то может помочь вам, кроме того, поскольку вы не опубликовали свой код подключения и не устанавливаете objectController.

+0

textDidChange get's called. Протестировано с помощью NSLOG. Я рассмотрю # 1 Спасибо. – 0SX

+0

Yup, ваше право о # 1. objectController имеет значение null при вызове. Что бы это вызвало? – 0SX

+0

Это не столько то, что заставляет его быть nil (в объективе-c оно равно NULL, NULL - это что-то еще). Это то, что вы ничего не делаете, чтобы сделать это не ноль. Мне очень сложно советовать, как он должен работать, не зная о своих целях более высокого уровня. Мне нужно знать, что должен контролировать объект ObjectController, и о том, что это окно просмотра/просмотра. – drewag

0

Я исправил проблему, создав экземпляр объекта ObjectController вместо указанного выше процесса.

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

Ну, вроде это работало. Метод вызывает NSLog, но он не выполняет другие команды в методе. Я смущен. – 0SX