我正在尝试编写一个全局函数,但是当我尝试调用它时,不断收到错误“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];
}
任何想法 感谢
答案 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];