xcode 4 жалуется, что ключ является «необъявленным идентификатором» без причины - PullRequest
0 голосов
/ 16 марта 2012

Пожалуйста, помогите - это сводит меня с ума ... У меня есть несколько очень похожих строк кода, но внезапно Xcode начал думать, что некоторые строки являются ошибками, и я не могу создать свое приложение.Вот некоторый фрагмент кода:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    cycleSettingsDate = [defaults objectForKey:kCycleSinceDateKey];
    cycleUnitFactor = [defaults boolForKey:kCycleUseMilesKey]? @"1.6" : @"1";
    runUnitFactor = [defaults boolForKey:kRunUseMilesKey]? @"1.6" : @"1";

    swimSettingsDate = [defaults objectForKey:kSwimSinceDateKey];

Элемент kCycleSinceDateKey окрашен в бледно-голубой цвет, как если бы он был объявленным свойством в моем заголовочном файле, например cycleSettingsDate, а это не так.Остальные три окрашены в коричневый цвет, так как вы ожидаете, что ключ будет иметь цветовую кодировку, и они отлично работают.Только kCycleSinceDateKey не работает должным образом.

В моем заголовочном файле есть следующее, точное совпадение с идентификатором plist, к которому он относится:

#define kCycleSinceDate @"cyclesincedate"
#define kSwimSinceDateKey @"swimsincedate"
#define kRunUseMilesKey    @"runusemiles"
#define kCycleUseMilesKey  @"cycleusemiles"

Я вышел из Xcode идаже перезагрузил мой макинтош для хорошей меры, но kCycleSinceDateKey все еще подчеркнут пунктирной красной линией и той же самой проблемой.У кого-нибудь есть идеи?

Заранее большое спасибо ...

Ответы [ 3 ]

1 голос
/ 16 марта 2012

в вашем коде. вы называете его kCycleSinceDateKey, а в определении вы называете его kCycleSinceDate.

1 голос
/ 16 марта 2012

Помимо ответов, в которых указано, что ключ отсутствует, я обычно определяю свои константы, как это, в .m. Это более компактно. См. Когда использовать статическую строку против # define

NSString * const kDefaultKeysCycleSinceDate = @"cyclesincedate";

и если мне нужно показать его в другом месте (обычно для определения констант), сделайте это в своем заголовке:

extern NSString* const kDefaultKeysCycleSinceDate;

Также:

Определение глобально доступной строки в Objective-C и # определяют против const и связывают с фреймворками

Я бы также начал каждый с одинаковым префиксом (kDefaultKeys ...), поэтому автозаполнение покажет вам все возможные ключи после ввода нескольких символов ...

0 голосов
/ 16 марта 2012

Вы объявили константу kCycleSinceDate и вместо нее используете kCycleSinceDateKey. Обратите внимание, что объявленное имя константы не заканчивается на Key .

Так что либо поменяйте делкарацию на:

#define kCycleSinceDateKey @"cyclesincedate" // Add Key

Или измените строку, в которой он используется:

cycleSettingsDate = [defaults objectForKey:kCycleSinceDate]; // Remove Key
...