2013-09-12 5 views
0

Я пытаюсь написать глобальную функцию, но продолжаю получать ошибку «Нет видимого интерфейса ...», когда я пытаюсь ее назвать.Глобальные функции Objective C

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

Любые идеи Благодаря

+0

Просьба предоставить код для view.m – SNR

+1

Проверить эту Http: // StackOverflow.com/questions/7294176/how-to-create-global-functions-in-objective-c – SNR

+0

PupilView не является подклассом Popover, поэтому метод 'PopoverPlay' не определен как метод представления. Когда вы используете 'self' в View' self', указывается на текущий экземпляр View. –

ответ

0

Для вызова метода вы написали, что вам нужно сделать что-то вроде:

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

Что у вас есть это экземпляр метод. Потому что ваш метод не зависит от каких-либо переменных экземпляра, вы могли бы сделать его метод класса путем изменения - к +:

+ (void)PopoverPlay; 

и

+ (void)PopoverPlay{ 

Тогда вам не нужно инициализировать новый Popover; вы можете позвонить:

[Popover PopoverPlay]; 
3

Код, который вы указали, является объявлением и определением класса, содержащего единственный метод экземпляра. Для того, чтобы использовать его, вам необходимо выделить экземпляр Popover с кодом, который выглядит примерно так:

#import "Popover.h" 

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

Когда люди говорят о «глобальных функций», они обычно не означают методы экземпляра (или даже методы класса) , поэтому я сомневаюсь, что это совсем то, что вам нужно. Возможно, вы имеете в виду фактическую функцию, которую вы можете вызывать из других частей вашего кода? Вы бы сделать это так же, как вы делаете в C:

void foo(void); 

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

Если добавить прототип (первая строка) в файл заголовка, вы можете использовать функцию в любом месте в любой файл, который включает в себя этот заголовок.

Update:

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

Проблема здесь состоит в том, что вы отправляете -PopoverPlay к self, но self в данном случае представляет собой экземпляр View. Вам нужно отправить -PopoverPlay экземпляру класса, который его реализует, то есть Popover. См. Мой пример выше. (Кстати, ваш интерфейс и реализация не совпадают: один PupilView и другой View.)

+0

привет там, вопрос ученика/взгляда был мной упрощающим, но я пропустил зрачок, когда меняю его – user2461593

Смежные вопросы