Вызов функции класса obj-c из другого класса - PullRequest
0 голосов
/ 14 февраля 2010

Я новичок в Obj-C, и у меня есть класс с переменной класса, и у меня есть функция не из класса, из которой мне нужно вызвать функцию переменной из первого, когда первый класс вызывает функцию. Это написано неправильно, но я не знаю правильных слов так:

Root.h:

@interface Root {
    UITableView *tableview;
}
@property (nonatomic,retain) UITableView *tableview;
@end

У меня есть функция (Root - это delagate, поэтому он вызывается и вызывает другую функцию, а не в каком-либо классе или чем-либо еще:

void Search()
{
    //here I need to call a function, I dont know how.  If I was in Root.m, it would be
    //[self.tableview reloadData];

Но здесь я не знаю, как это вызвать, я попытался передать Search указатель на функцию в Root.m, которая вызывает функцию:

-(void) update {
    [self.tableview reloadData];
}
-(void) anotherFunction {
    Search(update);

или

    Search(self.update);

и т.д. но там всегда ошибки, я также пытался передать указатель (self) в Search и вызвать

[pointer.tableview reloadData];

но это ошибки при запуске:

unrecognized selector sent to instance 0x3detc

Как мне это сделать?

(извините, если это очень запутанно)

Ответы [ 2 ]

0 голосов
/ 14 февраля 2010

Итак, позвольте мне сказать прямо: у вас есть класс Root и экземпляр этого класса myRoot. В классе есть две функции -update и -anotherFunction. У вас также есть функция C search(). Когда в -anotherFunction, вы хотите позвонить search() и оттуда перезвонить на -update в исходном экземпляре root.

Если это все правильно, давайте представим, что вы попали в -anotherFunction, позвонив [myRoot anotherFunction];. Мы также будем предполагать, что все находится в одном и том же файле или что все файлы были #import ed или #include d правильно.

Вам необходимо определить search() как void search(id callback). В -anotherFunction звоните search() вот так: search(self). Затем в search() вы можете вызвать [callback update]; для вызова -update из экземпляра класса, в котором вы изначально выполняли -anotherFunction.

Я думаю, что это отвечает на ваш вопрос. Пожалуйста, не стесняйтесь обращаться за разъяснениями.

0 голосов
/ 14 февраля 2010

Я не уверен, что правильно вас понял, но если вы хотите вызвать функцию, определенную в классе, вне класса, вы просто создаете экземпляр класса, если это метод экземпляра, и используете его в качестве получателя, или если это метод класса, вы используете сам класс в качестве получателя. Другими словами, предположим, что я хочу вызвать метод someFunction, который является методом экземпляра SomeClass. Вот что мне нужно сделать:

SomeClass *someClass = [[SomeClass alloc] init];
[someClass someFunction];

Если это функция класса, мне не нужно создавать экземпляр объекта. Я просто делаю это:

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