【问题标题】:IOS ARC: Unable to use #define constant directly [closed]IOS ARC:无法直接使用#define常量[关闭]
【发布时间】:2012-12-18 08:01:37
【问题描述】:

我的 MyClass.m 文件中有一个常量,名为:

#define kUDUserHistory              @"kUDUserHistory";

没有 ARC 我可以直接使用它,但现在我必须将它复制到第二个变量中然后使用它。如果我尝试直接在 ARC 中使用它,则会显示错误'Expected Expression'
no-ARC

[[NSUserDefaults standardUserDefaults] setObject:data forKey:kUDUserHistory];

ARC

NSString *key = kUDUserHistory;
[[NSUserDefaults standardUserDefaults] setObject:data forKey:key];

我的具体问题是:

  • 为什么在这种情况下我不能直接使用常量?
  • 管理常量的最佳方法是什么,尤其是在 ARC 中?

【问题讨论】:

  • 与 arc 和 non arc 无关,您的常量声明包含分号,可能是导致问题的原因。
  • Midhun MP 是正确的。如果您以这种方式定义 kUDUserHistory,则无法编译您的“无 ARC”代码。

标签: ios constants


【解决方案1】:
#define kUDUserHistory              @"kUDUserHistory";

应该是:

#define kUDUserHistory              @"kUDUserHistory"

为了你的答案:

[[NSUserDefaults standardUserDefaults] setObject:data forKey:@"kUDUserHistory";];

首先将其传递给NSString

NSString *key = @"kUDUserHistory";;

这就是它起作用的原因。

【讨论】:

  • 你是对的,删除分号解决了问题。但我想知道,为什么当我们将它复制到第二个变量中时它会起作用?
  • @MuhammadNabeelArif 因为它会扩展为 var = @"string";; 并且空语句是有效的,只是不在表达式中。但是,在尝试编写 iOS 应用程序之前,您不能先正确学习 C 语言吗?
【解决方案2】:

你也可以使用

在.h文件中

extern NSString * const kUDUserHistory;

在 .m 文件中

NSString * const kUDUserHistory = @"kUDUserHistory";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多