全球职能目标C.

时间:2013-09-12 17:58:35

标签: iphone objective-c ipad

我正在尝试编写一个全局函数,但是当我尝试调用它时,不断收到错误“No visible interface ....”。

Popover.h

#import <Foundation/Foundation.h>

@interface Popover : NSObject{}

- (void)PopoverPlay;

@end

Popover.m

#import "Popover.h"

@implementation Popover

- (void)PopoverPlay{
     NSLog(@"I Work");
}

@end

在View.m中我添加了导入“Popover.h”但是当我尝试运行时我无法摆脱错误消息。

#import "View.h" 
#import <QuartzCore/QuartzCore.h>
#import "Popover.h"

@interface View ()
{
}
@end

@implementation View

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
    // Custom initialization

    }
    return self;
}
- (void)didReceiveMemoryWarning{
    [super didReceiveMemoryWarning];
}

- (void)viewDidLoad{
    [super viewDidLoad];
}

- (IBAction)ButtonPress {
    [self PopoverPlay];
}

任何想法 感谢

2 个答案:

答案 0 :(得分:3)

您展示的代码是包含单个实例方法的类的声明和定义。要使用它,您需要分配Popover的实例,其代码类似于:

#import "Popover.h"

//...
Popover *pop = [[Popover alloc] init];
[pop PopoverPlay];
//...

当人们谈论“全局函数”时,他们通常不会指实例方法(甚至类方法),所以我怀疑这是你所追求的。也许你的意思是你可以从代码的其他部分调用的实际函数?你可以像在C中那样做:

void foo(void);

void foo(void)
{
    NSLog(@"This works");
}

如果将原型(第一行)添加到头文件中,则可以在包含该头的任何文件中的任何位置使用该函数。

<强>更新

- (IBAction)ButtonPress {
    [self PopoverPlay];
}

此处的问题是您向-PopoverPlay发送self,但在这种情况下self代表View的实例。您需要将-PopoverPlay发送到实现它的类的实例,即Popover。见上面的例子。 (顺便说一句,您的界面和实现不匹配:一个是PupilView,另一个是View。)

答案 1 :(得分:0)

要调用您编写的方法,您需要执行以下操作:

Popover *myPopover = [[Popover alloc] init];
[myPopover PopoverPlay];

您拥有的是实例方法。因为您的方法不依赖于任何实例变量,所以您可以通过将-更改为+来使其成为方法:

+ (void)PopoverPlay;

+ (void)PopoverPlay{

然后您不需要初始化新的Popover;你可以打电话:

[Popover PopoverPlay];