Что происходит, так это то, что 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. Я не рекомендую, поскольку вы хотите использовать объектно-ориентированные вещи. Не смешивайте оба, иначе вы создадите монстра.