代码之家  ›  专栏  ›  技术社区  ›  Christian Stewart

另一个类上的objective-c调用函数?

  •  10
  • Christian Stewart  · 技术社区  · 14 年前

    以下是我的目标C课程:

    AppDelegate
    SomeScript
    

    如何从应用委托或任何其他类调用somescript类上的函数loggedin?

    谢谢, 克里斯汀·斯图尔特

    4 回复  |  直到 10 年前
        1
  •  37
  •   andyvn22    14 年前

    (我假定 loggedIn 是一个不带参数的实例方法。)首先,几个术语问题:

    1. 它们不是功能,而是 方法 (不过,也有同样的想法)。
    2. 你不调用方法,你 发送消息 ( 通常 不过,也有同样的想法)。
    3. 最重要的是,我们通常不向班级发送消息,而是向 实例 在那些类别中。(如果你看不出区别,想象一下把一封信放在 邮箱的概念 与寄信 你的邮箱 . 只有一个是有意义的!)

    所以,我们的新计划是 实例化 那就写个剧本吧 发信息 到实例。

    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];
    

    最后一个复杂的问题:我们不想每次调用 洛吉丁 (我猜想)!所以,您应该将实例化放在只运行一次的地方(例如, application:DidFinishLaunchingWithOptions: )塔达!

        2
  •  3
  •   rano    14 年前

    您的AppDelegate类中应该有一个somescript对象的初始化引用(假设您不需要somescript作为 Singleton 类,如AppDelegate)。类似:

    SomeScript * myScript;

    在AppDelegate接口中作为IVAR,而在其 application:DidFinishLaunchingWithOptions:

    您已经初始化了它(假设使用默认的alloc/init组合调用):

    myScript = [[SomeScript alloc] init]

    完成所有这些操作后,当需要调用MyScript方法时,只需执行以下操作:

    [myScript myMethod:myParameter]

    Here 你可以找到一个很好的苹果初学者指南

        3
  •  2
  •   Artur    11 年前

    如果不想使用somescript的实例…您可以采用不同的方法。使用nsnotificationCenter向somescript对象发送通知,并使其在发送后运行选择器。

    在您的-(void)awakefromnib方法中,从某个脚本放置以下代码:

      [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(mySelector:)
                                                     name:@"aUniqueNameForTheNotification"
                                                   object:nil];
    

    创建方法“myselector:”,并将调用放到loggedin方法中。(或者,如果您愿意,可以直接用loggedin替换“myselector:”)

    -(void) mySelector:(id)elem
    {
        [self loggedIn];
    }
    

    然后别忘了删除dealoc上的观察者,所以在somescript类中也放置以下代码:

    - (void)dealloc
    {
        [[NSNotificationCenter defaultCenter] removeObserver:self];
    }
    

    然后,您可以从类似的任何其他人发送通知:

     [[NSNotificationCenter defaultCenter] postNotificationName:@"aUniqueNameForTheNotification"  object:self];
    

    最后一段代码向somescript发送通知,然后执行选择器。

    希望它能帮助你们!

        4
  •  2
  •   Sameera R. Saleh Masum    10 年前

    我们可以这样称呼它 [self loggedIn]
    什么时候? 洛吉丁 方法在 正文 类,使用最新Xcode中的简单语法。

    [[SomeScript new] loggedIn];