2015-12-16 3 views
0

Objective-C новичок здесь.Objective-C доступ другой класс

Я слишком долго смотрел на это и решил обратиться за помощью.

У меня есть ViewController и TestClass. Я хочу сообщить метод из TestClass, называемый TestMethod в ViewController. Будучи из мира C#, я бы сделал:

TestClass testClass = new TestClass(); 
testClass.TestMethod(); 

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

TestClass.h

#import <Foundation/Foundation.h> 

@interface TestClass : NSObject 

@end 

TestClass.m

#import "TestClass.h" 

@implementation TestClass 

-(void)testMethod { 

} 

ViewController.h

#import "TestClass.h" 

@interface ViewController : UIViewController 

ViewController.m

#import "ViewController.h" 

TestClass *testClass; 

@interface ViewController() 

@end 

@implementation ViewController 

-(void)viewDidLoad { 
    [testClass testMethod]; 
} 

Что мне не хватает?!?!

+0

Вы правы. Удалены. –

+0

FYI - В вашем 'ViewController.m' у вас есть TestClass * testClass;' плавающий в середине нигде. Это вряд ли будет тем, что вы хотите, потому что это создает глобальную переменную файла. Если вы намерены сделать эту переменную экземпляра, она должна быть объявлена ​​в нужном месте. – rmaddy

+0

Спасибо за подсказку. –

ответ

4

Что вам не хватает, это эквивалент линии с new TestClass.

TestClass *testObject = [[TestClass alloc] init]; 
[testObject testMethod]; 

Также поместите объявление своего метода в интерфейс TestClass.h.

-(void)testMethod; 

И, это хорошая идея, чтобы положить ...

#import "TestClass.h" 

... в ваш ViewController.m файл вместо вашего .h, если это абсолютно необходимо.

+0

The - (void) testMethod сделал трюк. У меня было что-то похожее на первую часть ответа, хотя немного запутанное. –

+0

Любопытно, зачем ставить импорт в .m? –

+1

Импорт должен идти к источнику (.m), потому что это не обязательно в заголовке. Заголовки предназначены для всех внешних клиентов, которые должны знать о вашем классе, и они должны содержать только информацию, необходимую для рекламы. Поскольку ничего больше в вашем заголовке не зависит от знания содержимого testclass.h, его не должно быть. – mah

Смежные вопросы