Существует много вопросов о доступе к «частному» (я слышу технически, что в сообщениях Obj-C отсутствует частный вопрос) Obj-C. И есть много вопросов, касающихся No visible @interface для SomeClass объявляет селектор «SomeMethod». Тем не менее, нет ни одного решения, которое касалось обоих.Objective C запускает «частный» метод, определенный в одном файле .mm из другого файла .mm
Так вот какой код. Example.h
#import <Cocoa/Cocoa.h>
@interface Example : NSView
@end
Example.mm
#import "Example.h"
@interface Example()
- (void) printWordOne:(NSString*) firstWorld wordTwo:(NSString*) secondWord;
@end
@implementation Example
- (void)drawRect:(NSRect)dirtyRect {
[super drawRect:dirtyRect];
// Drawing code here.
}
- (void) printWordOne:(NSString*) firstWorld wordTwo:(NSString*) secondWord{
NSLog(@"The two words are %@ %@", firstWorld, secondWord);
}
@end
ViewController.h
#import <Cocoa/Cocoa.h>
#import "Example.h"
@interface ViewController : NSViewController{
IBOutlet Example *example;
}
@end
IBOutlet был подключен в раскадровке.
ViewController.mm
#import "ViewController.h"
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
[example printWordOne:@"Hello" wordTwo: @"World"];
}
- (void)setRepresentedObject:(id)representedObject {
[super setRepresentedObject:representedObject];
// Update the view, if already loaded.
}
@end
вопрос я имею с этим вызовом метода. [example printWordOne:@"Hello" wordTwo: @"World"];
Ошибка No visible @interface for 'Example' declares the selector 'printWordOne:wordTwo'
Мне нужен способ вызова этой функции, не объявляя его в файле Example.h. Если я #import Example.mm
в моем ViewController.mm
файле я получаю следующее:
duplicate symbol _OBJC_CLASS_$_Example in:
/path/Example.o
/path/ViewController.o
duplicate symbol _OBJC_METACLASS_$_Example in:
/path/Example.o
/path/ViewController.o
ld: 2 duplicate symbols for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Я знаю, используя class_copyMethodList
я могу получить список методов и список этот метод из ViewController.mm
. Но опять же есть способ выполнить этот метод.
Любая помощь была бы принята с благодарностью.
Спасибо Борис, я знал, что что-то просто не хватает. – user2517182