Цель-C: Как получить доступ к методам в других классах - PullRequest
2 голосов
/ 22 марта 2010

У меня есть простой вопрос, но я знаю, что после многих поисков в книгах и в Интернете я не могу найти решение. У меня есть стандартный проект iPhone, который содержит, помимо прочего, ViewController. Мое приложение отлично работает на данный момент.

Теперь я хочу создать универсальный класс (расширяющий NSObject), который будет иметь несколько основных служебных методов. Давайте назовем этот класс Util.m (вместе со связанным файлом .h).

Я создаю класс Util (и файл .h) в своем проекте, и теперь я хочу получить доступ к методам, содержащимся в этом классе класса, из моего ViewController.

Вот пример простой версии Util.h

#import <Foundation/Foundation.h>

@interface Util : NSObject {

}

- (void)myMethod;

@end

Тогда файл Util.m будет выглядеть примерно так:

#import "Util.h"

@implementation Util

- (void)myMethod {
    NSLog(@"myMethod Called");
}

@end

Теперь, когда мой класс Util создан, я хочу вызвать метод "myMethod" из моего ViewController. В файле .h моего ViewController я делаю следующее:

#import "Util.h"

@interface MyViewController : UIViewController {

    Util *utils;

}

@property (assign) Util *utils;

@end

Наконец, в ViewController.m я делаю следующее:

#import "Util.h"

@implementation MyViewController

@synthesize utils;

- (void)viewDidLoad {
    [super viewDidLoad];

    utils.myMethod;  //this doesn't work
    [utils myMethod]; //this doesn't work either
    NSLog(@"utils = %@", utils);  //in the console, this prints "utils = (null)"
}

Что я делаю не так? Я хотел бы не только иметь возможность напрямую ссылаться на другие классы / методы в таком простом утилитарном классе, как этот, но я также хотел бы напрямую ссылаться на другие ViewControllers, а также их свойства и методы.

Я в тупике! Пожалуйста, помогите.

Ответы [ 2 ]

5 голосов
/ 22 марта 2010

Вам, вероятно, следует взглянуть на один из множества учебных пособий по Objective C, но прямой ответ на ваш вопрос заключается в том, что вы не выделили и не инициализировали экземпляр своего объекта.Код должен выглядеть так:

utils = [[Utils alloc] init];
[utils myMethod];
3 голосов
/ 22 марта 2010

Вам просто нужно создать реальный объект.

Ваша реализация определяет только указатель на Util объект, но он по-прежнему указывает на nil.

utils = [[Util alloc] init];

Альтернативой является создание статических методов путем замены - на + в префиксе метода.

[Util myMethod];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...