iPhone SDK:访问其他类中的方法

时间:2009-10-24 15:38:44

标签: objective-c iphone

在我的iPhone应用程序中,我有多个类文件,我有我的主应用程序的类文件,然后我有我的UIView类文件。我在我的UIView类文件中声明了一个简单的 - (void)方法,如何从主应用程序类文件中访问它?

更详细一点:在我的应用程序中播放视频,当此视频播放完毕后发送通知并执行操作,我已成功设置,但是当电影结束时我想要一个声明的方法另一个要执行的类文件。如果方法是在同一个类文件中声明的,我只需使用这段代码:[self mySimpleVoidMethod];但显然这不起作用如果方法是在不同的类文件中声明的。我相信可以访问在不同的类文件中声明的方法,但我还没有得到关于如何做到这一点的线索。对不起,如果我使用完全错误的术语来命名。但我对所有人一起编程都比较新。

3 个答案:

答案 0 :(得分:3)

根据您的设置,您有几个选项。以下是一些:

1)使用函数(被调用者)作为调用者类中的属性添加对类的引用:

Caller.h

@interface Caller : SomeObject {
    Callee *myCallee;
    ...
}
@property(nonatomic, retain) Callee *myCallee;

Caller.m

@synthesize myCallee;
-(void)someAction {
    [myCallee doSomething];
}

初始化两个类后设置调用者的东西:

caller.myCallee = callee;

2)使用另一个通知事件,就好像你已经知道该怎么做。

3)如果你有许多不同的类,Caller可能需要调用所有类支持相同的方法,请使用协议:

DoesSomething.h

@protocol DoesSomething
    -(void)doSomething;
@end

Callee.h

@interface Callee : NSObject<DoesSomething> {  // NSObject or whatever you're using...
    ...
}
-(void)doSomething;

Caller.h

@interface Caller : SomeObject {
    id<DoesSomething> *myCallee;
    ...
}
@property(nonatomic, retain) id<DoesSomething> *myCallee;

......然后按照例子1。

4)使用performSelector向班级发送消息。

Caller.h

@interface Caller : NSObject {
    SEL action;
    id callee;
}
-(void)setupCallbackFor:(id)target action:(SEL)callback;

Caller.m

-(void)setupCallbackFor:(id)target action:(SEL)callback {
    callee = target;
    action = callback;
}

-(void)someAction {
    if([callee respondsToSelector:action]) {
        [callee performSelector:action];
}

我确信还有其他方法,这些方法各有利弊,但其中的内容应符合您的需求和/或给您足够的扫描文档以填补空白...... < / p>

答案 1 :(得分:1)

几周前我做了一篇博客文章,概述了一种方法。它与之前的答案类似,包括一些您可以下载和查看的示例代码。它基于使用表视图控制器,但您应该能够轻松地将这些想法调整到您的应用程序中。

Passing values and messages between views on iPhone

答案 2 :(得分:0)

您需要另一个类的实例,可以从电影结束时运行的代码访问。通常,这是通过将另一个类的实例存储为类中的字段,通过“setter”或在构造期间设置来实现的。您还可以使用key-value observing,观看代表电影播放状态的键;另一个类的实例可以注册以观察对该键的更改。

特别是对于使用UIView的模式,视图的UIViewController可以访问它(通过view方法)。如果你的“主应用程序的类文件”有一个指向控制器的指针 - 它们可能会通过Interface Builder进行设置 - 那么这是一种简单的方法来访问UIView实例。