Не удалось найти метод setDoubleValue в классе NSProgressIndicator
Для этого, потому что NSProgressIndicator является частью AppKit (библиотека GUI Какао), и вы только ссылаетесь наФонд (который не является материалом GUI).Кажется, что в вашем коде вы пытались определить интерфейс для NSProgressIndicator самостоятельно, но вы не объявили никаких методов для него - поэтому он жалуется на невозможность найти метод setDoubleValue.
Что следует сделатьты об этом?Что ж, если вы хотите использовать GUI от Cocoa, вам нужно структурировать свою программу так, как ожидает система Cocoa от Cocoa.В XCode, если вы создаете новое приложение Какао, оно должно дать вам пример проекта для дальнейшего развития.В частности, ваша main()
функция должна содержать return NSApplicationMain(argc, (const char **) argv);
, которая обрабатывает запуск цикла выполнения для получения событий.
Если вы просто хотите узнать о многопоточности, может быть лучше отказаться от попыток получить вещи с графическим интерфейсом в одной программе и адаптировать свой код, чтобы вместо этого просто печатать их на консоль.
Мне трудно поверить, что это пример из книги, так как он выглядит довольно принципиально разбитым!
Другие ошибки, которые я обнаружил при попытке запустить его:
Ожидается ')'before': 'token
Это на линии heartbeat->thread = [[NSThread alloc]initWithTarget:heartbeat selector:(heartbeatThread:) object:nil];
.
Проблема заключается в синтаксисе объявления селектора: вместо того, чтобы просто сказать selector:(heartbeatThread:)
, вам нужно сказать selector:@selector(heartbeatThread:)
.
'thread' undeclared (первое использование вthis function '
В своем заголовочном файле вы заявили, что класс Heartbeat
имеет метод с именем stop
. (То есть вы определили -(void)stop;
в разделе @interface для Heartbeatclass).
Однако вы реализовали этот метод в разделе @implementation для класса Process
.
Вы бы упростили себе, если бы у вас была одна пара .h и.m файлов на класс, вместо того, чтобы пытаться объединить несколько определений классов в одну пару файлов. Таким образом, вы можете убедиться, что вы помещаете реализацию метода stop
в файл .m правильного класса.
свойство 'progress' требует определения метода '-progress' - используйте @synthesize, @dynamic или предоставьте реализацию метода
В реализации для process
вы определили @свойство calсветодиод progress
.Если вы определяете свойство, вам нужно либо написать для него геттеры и сеттеры, либо написать @synthesize progress
в своей реализации.Выполнение последнего эквивалентно тому, как Objective-C автоматически генерирует ваши геттеры и сеттеры во время выполнения.