0

我正在尝试编写一个全局函数,但是当我尝试调用它时不断收到错误“没有可见的界面......”。

弹出框.h

#import <Foundation/Foundation.h>

@interface Popover : NSObject{}

- (void)PopoverPlay;

@end

弹出框.m

#import "Popover.h"

@implementation Popover

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

@end

在 View.mi 中添加导入“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];
}

任何想法谢谢

4

2 回答 2

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

这里的问题是您要发送-PopoverPlayself,但self在这种情况下代表View. 您需要发送-PopoverPlay到实现它的类的实例,即Popover. 请参阅我上面的示例。(顺便说一句,您的接口和实现不匹配:一个是PupilView,另一个是View。)

于 2013-09-12T18:09:11.267 回答
0

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

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

你所拥有的是一个实例方法。因为您的方法不依赖任何实例变量,您可以通过将其更改-+

+ (void)PopoverPlay;

+ (void)PopoverPlay{

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

[Popover PopoverPlay];
于 2013-09-12T18:08:42.533 回答