Вот мои классы objective-c:
AppDelegate
SomeScript
Как я могу вызвать функцию loggedIn в классе SomeScript из приложения-делегата или любого другого класса?
Спасибо, Кристиан Стюарт
Вот мои классы objective-c:
AppDelegate
SomeScript
Как я могу вызвать функцию loggedIn в классе SomeScript из приложения-делегата или любого другого класса?
Спасибо, Кристиан Стюарт
(Я предполагаю, что loggedIn
- это метод экземпляра без параметров.) Во-первых, несколько терминологических проблем:
Итак, наш новый план состоит в том, чтобы сначала создать экземпляр SomeScript, а затем отправить сообщение экземпляру.
SomeScript* myScript = [[SomeScript alloc] init]; //First, we create an instance of SomeScript
[myScript loggedIn]; //Next, we send the loggedIn message to our new instance
Это хорошо. Однако! Бьюсь об заклад, вы хотите, чтобы ваш script придерживался для последующего использования. Таким образом, мы должны действительно сделать его переменной экземпляра вашего делегата приложения. Итак, вместо этого в AppDelegate.h добавьте это внутри фигурных скобок:
SomeScript* myScript;
Теперь наша переменная будет придерживаться, и наша первая строка из нее будет просто:
myScript = [[SomeScript alloc] init];
Последнее осложнение: мы не хотим создавать новый script каждый раз, когда вызываем loggedIn
(предположим)! Итак, вы должны разместить экземпляр где-то, он будет запускаться только один раз (например, application:DidFinishLaunchingWithOptions:
). Та-да!
У вас должна быть инициализированная ссылка на объект SomeScript в вашем классе AppDelegate (если вы не нуждаетесь в том, чтобы SomeScript был Singleton класс, как ваш AppDelegate). Что-то вроде:
SomeScript * myScript;
как ivar в вашем интерфейсе AppDelegate, а в application:DidFinishLaunchingWithOptions:
вы его запустили (предположим, что со списком вызовов по умолчанию alloc/init):
myScript = [[SomeScript alloc] init]
Выполнено все это, когда вам нужно вызвать метод myScript, вы можете просто сделать:
[myScript myMethod:myParameter]
Здесь вы можете найти хороший путеводитель для новичков от Apple
Если вы не хотите использовать экземпляры SomeScript... вы можете следовать другому подходу. Используйте NSNotificationCenter для отправки уведомления на ваш объект SomeScript и после этого запустите селектор.
В вашем - (void) awakeFromNib {} методе, из SomeScript поместите следующий код:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(mySelector:)
name:@"aUniqueNameForTheNotification"
object:nil];
Создайте метод "mySelector:" и поместите вызов на ваш метод loggedIn. (Или, если хотите, вы можете заменить "mySelector:" на loggedIn напрямую)
-(void) mySelector:(id)elem
{
[self loggedIn];
}
Затем не забудьте удалить наблюдателя на dealloc, поэтому поместите следующий фрагмент кода в свой класс SomeScript:
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
Затем вы можете отправить уведомление от любого другого, например:
[[NSNotificationCenter defaultCenter] postNotificationName:@"aUniqueNameForTheNotification" object:self];
Эта последняя часть кода отправляет уведомление SomeScript, и ваш селектор выполнен.
Надеюсь, это поможет вам, ребята!
Мы можем назвать его как [self loggedIn]
Когда метод loggedIn находится в классе SomeScript, используя простые синтаксисы в последнем xcode.
[[SomeScript new] loggedIn];