добавление функции в категорию-цель - PullRequest
1 голос
/ 28 февраля 2009

Я объективный C новичок. Почему я получаю предупреждение за вызов функции, которую я создал в категории?

#import <stdio.h>
#import <objc/Object.h>

@interface MyObj: NSObject
{
@public
    int  num;
}

-(void) print;
@end

@implementation MyObj;
-(void) print
{
    printf("%d\n", self->num);
}
@end

@implementation MyObj(more)
-(void) quack
{
    printf("Quack\n");
}
@end


int main (int argc, char *argv[])
{
    MyObj  *obj = [[MyObj alloc] init];
    obj->num = 9;
    [obj print];
    [obj quack]; //warning my not respond to quack 
    [obj release]; 
}

Ответы [ 2 ]

3 голосов
/ 28 февраля 2009

Вам необходимо объявить интерфейс для MyObj (подробнее), например.

@interface MyObj(more)
-(void)quack;
@end
1 голос
/ 28 февраля 2009

Просто хотел указать на пару вещей, потому что вы упомянули, что вы новичок в Obj-C.

Внутри метода вам не нужно обращаться к self->, чтобы получить переменные экземпляра, поэтому ваш метод print может быть:

-(void) print
{
    printf("%d\n", num);
}

Также обратите внимание, что обычно вы никогда напрямую не обращаетесь к переменной экземпляра вне методов объекта (т.е. вы не будете делать obj->num - на самом деле вы не часто видите оператор -> в коде Obj-C) , Вместо этого вы должны указать методы доступа для свойства (при условии, что это Objective-C 2.0):

// In the interface:
@property (assign) int num;

// In the implementation:
@synthesize num;

// In main:
obj.num = 9;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...