【发布时间】:2010-08-26 06:08:40
【问题描述】:
这是我的 Objective-C 类:
AppDelegate
SomeScript
如何从 app-delegate 或任何其他类调用 SomeScript 类上的函数 loggedIn?
谢谢, 克里斯蒂安·斯图尔特
【问题讨论】:
标签: objective-c class
这是我的 Objective-C 类:
AppDelegate
SomeScript
如何从 app-delegate 或任何其他类调用 SomeScript 类上的函数 loggedIn?
谢谢, 克里斯蒂安·斯图尔特
【问题讨论】:
标签: objective-c class
(我假设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
这很好。然而!我敢打赌,您希望您的脚本保留以供以后使用。因此,我们真的应该让它成为您的应用程序委托的实例变量。因此,在 AppDelegate.h 中,将其添加到大括号内:
SomeScript* myScript;
现在我们的变量将继续存在,我们之前的第一行变得简单:
myScript = [[SomeScript alloc] init];
最后一个问题:我们不想每次调用loggedIn 时都创建一个新脚本(我假设)!因此,您应该将实例化放置在它只会运行一次的地方(例如,application:DidFinishLaunchingWithOptions:)。哒哒!
【讨论】:
release 发送到myScript。我没有告诉你,因为我假设你会在应用打开的整个过程中使用它。
你应该在你的 AppDelegate 类中有一个 SomeScript 对象的初始化引用(假设你不需要 SomeScript 像你的 AppDelegate 那样是一个Singleton 类)。比如:
SomeScript * myScript;
在您的 AppDelegate 界面中作为 ivar,而在其 application:DidFinishLaunchingWithOptions: 中
您已经对其进行了初始化(假设使用默认的 alloc/init 组合调用):
myScript = [[SomeScript alloc] init]
做完这一切,当你需要调用 myScript 的方法时,你可以简单地做:
[myScript myMethod:myParameter]
Here你可以从 Apple 那里找到一个很好的初学者指南
【讨论】:
如果您不想使用 SomeScript 的实例...您可以采用不同的方法。使用 NSNotificationCenter 向 SomeScript 对象发送通知,然后让它运行选择器。
在您的 -(void)awakeFromNib{} 方法中,从 SomeScript 中放置以下代码:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(mySelector:)
name:@"aUniqueNameForTheNotification"
object:nil];
创建方法“mySelector:”,然后调用您的 loggedIn 方法。 (或者,如果您愿意,可以直接将“mySelector:”替换为loginIn)
-(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];
【讨论】: