Новинка в Objective-c, привет, мир

#objective-c #xcode4.2

#objective-c #xcode4.2

Вопрос:

Я только начинаю изучать программирование на Objective-C. Я разрабатываю Xcode 4.2 на Mac OS X версии 10.7.2 на iMac. Я читаю книгу Стивена Кочана «Программирование на Objective-C», в которой содержится простой пример «Hello World»:

 #import <Foundation/Foundation.h>

int main (int argc, const char * argv[])
{
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    NSLog (@"Hello, World!");
    [pool drain];
    return 0;
}
  

При компиляции он выдает множество ошибок:

/ Разработчик/SDKs/MacOSX10.7.sdk/Система / Библиотека/ Фреймворки/ Фонд.framework /Headers/NSObjCRuntime.h:313:19: ошибка: неизвестное имя типа ‘NSString’ [1]

Есть еще много подобных. Есть ли что-то, что необходимо сделать перед компиляцией в первый раз? Какие-то настройки в Xcode?

Комментарии:

1. Для тех из нас, у кого нет этой книги, возможно, вы захотите описать шаги, которые вы предприняли в этом примере. Вы создали новый проект командной строки? Называется ли этот файл main.m? Вы не забыли отменить автоматический подсчет ссылок?

Ответ №1:

Unknown typename NSString означает, что вы передаете код objective c (обычному) компилятору c

Комментарии:

1. Я создал это как проект командной строки… и он называется main.m

2. Обнаружена проблема … при создании проекта я оставил «тип» просто как «c». Я изменил его на «Foundation», и это сработало. Это привело ко всем нужным заголовочным файлам для Objective-C, прежде чем он просто пытался скомпилироваться на обычный старый c .

Ответ №2:

Судя по вашему коду, вы выбрали неправильный проект приложения для начала. Похоже, вы выбираете что-то, что связано с программой на c

Я предлагаю вам нажать Файл -> новый проект и выбрать приложение Cocoa для начала.

Затем вы копируете свой код и помещаете его в метод ‘didFinishLaunchingWithOptions’ в вашем файле appdelegate

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    NSLog (@"Hello, World!");
    [pool drain];
    return YES;

}
  

Соберите и запустите программу. Вы должны иметь возможность видеть свой Hello World в журнале консоли..

Комментарии:

1. Нет, вы можете написать инструмент командной строки в Objective-C. Шаблон приложения Cocoa используется для создания приложения с графическим интерфейсом.

2. Да, вы можете.. И это не инструмент командной строки.. Вы определенно можете увидеть результат в журнале консоли

3. Я не уверен, что ты имеешь в виду. hchattaway пытается написать программу командной строки; ваше предложение использовать шаблон приложения Cocoa заставило бы его написать программу с графическим интерфейсом вместо этого.

4. Потому что это похоже на код для программы командной строки; а именно, он ссылается на Foundation, а не Cocoa, полностью написан в main функции, выводится на консоль и никогда не вызывается NSApplicationMain .

5. Чем это не похоже на программу командной строки? (Он даже ничего не импортирует из Cocoa, так что, скорее всего, это не программа с графическим интерфейсом.)

Ответ №3:

У меня тоже была эта проблема. Я обнаружил, что после того, как я выбрал «Командная строка», я выбрал «Core foundation», а не «Foundation» в окне, где я написал название проекта. Это было причиной ошибки для меня. Будьте осторожны!