В Objective-C, как использовать «self» в функции main ()? - PullRequest
3 голосов
/ 24 февраля 2012

У меня есть определение:

@interface MyClass: NSObject
{
   NSString *str;
   id delegate;
}
-(id)initWithStr:(NSString *)str
        delegate:(id)delegate;
@end

, и когда я отправляю сообщение на мой объект в main.m, например:

int main(int argc, const char * argv[])
{
    @autoreleasepool {
       [[MyClass alloc] initWithStr:@"abc-xyz"
                           delegate:self];
    }
}

Есть ошибка "Использование необъявленного идентификатора 'self' ".Я новичок в target-c, и я знаю, что «self» указывает на получателя сообщения, но я не знаю, как использовать его в функции main ().Кто-нибудь может сказать мне, что в этом плохого и как это исправить?

Ответы [ 3 ]

4 голосов
/ 24 февраля 2012

Что происходит, так это то, что self указывает на исполняемый объект. Функция main не находится в классе, поэтому вы не можете вызывать self для функции, только для метода класса. Что ты на самом деле пытаешься сделать? Используйте AppDelegate. Когда вы создаете новый проект, Xcode уже дает вам несколько файлов. Один из них называется (YOUR_PROJECT) AppDelegate. Это отправная точка вашего приложения.

Если у вас есть какие-либо настройки при инициализации вашего приложения, найдите файл AppDelegate.m, найдите метод - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions и поместите свой код в этот метод.

Никогда не связывайтесь с файлом main.m.

EDIT:

Для Mac OS X вот что вы должны сделать:

Создайте класс, выступающий в роли делегата, и добавьте этот класс к делегату.

 MyDelegate * d;
 MyClass * c;

int main(int argc, const char * argv[])
{
    @autoreleasepool {

       d = [[MyDelegate alloc] init];

       c = [[MyClass alloc] initWithStr:@"abc-xyz"
                           delegate:d];
    }
}

Затем в MyDelegate реализуйте обратные вызовы протокола.

Если вы хотите иметь обратный вызов на main, вам придется использовать указатель на функцию. Вам придется войти в мир простого C. Я не рекомендую, поскольку вы хотите использовать объектно-ориентированные вещи. Не смешивайте оба, иначе вы создадите монстра.

0 голосов
/ 24 февраля 2012

В Objective-C, как использовать 'self' в функции main ()?

Это невозможно.

Поскольку "self" можно использовать толькопо экземплярам объектов.main () - это функция.Функции - это не объекты, а код «сам по себе».

0 голосов
/ 24 февраля 2012

Вы не используете функцию main () следующим образом.
Сделайте это в AppDelegate, тогда он будет просто работать.

...