xcode 4无缘无故地抱怨密钥是“未声明的标识符”

时间:2012-03-16 00:07:15

标签: iphone ios xcode ios5 xcode4.2

请帮助 - 这让我发疯... 我有许多代码非常相似,但突然间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,甚至重新启动我的mac以获得良好的衡量标准,但kCycleSinceDateKey仍然用红色虚线和相同的问题加下划线。有没有人有任何想法?

非常感谢...

3 个答案:

答案 0 :(得分:1)

在你的代码中。你将它称为kCycleSinceDateKey,在定义中你将它称为kCycleSinceDate。

答案 1 :(得分:1)

除了指出Key缺失的答案之外,我通常在.m中定义这样的常量。它更紧凑。见When to use static string vs. #define

NSString * const kDefaultKeysCycleSinceDate = @"cyclesincedate";

如果我需要在别处公开它(通常是为什么定义常量),请在标题中执行此操作:

extern NSString* const kDefaultKeysCycleSinceDate;

此外:

Defining a globally accessible string in Objective-C#define vs const and linking against frameworks

我也会用相同的前缀(kDefaultKeys ...)开始每个,所以自动完成功能会在你键入几个字符后显示所有可能的键...

答案 2 :(得分:0)

您声明了常量kCycleSinceDate并改为使用kCycleSinceDateKey。请注意,声明的常量名称不以结尾。

所以要么将de decaration改为:

#define kCycleSinceDateKey @"cyclesincedate" // Add Key

或者将其使用的行更改为:

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