【问题标题】:Define the app delegate as a constant?将应用程序委托定义为常量?
【发布时间】:2010-12-28 20:48:44
【问题描述】:

我正在尝试编写一个 iPhone 应用程序,但遇到了问题。
我已经在一个类中声明了一个常量作为应用程序委托

#define ikub (iKubMobileAppDelegate *)[[UIApplication sharedApplication] delegate]

当我需要获取数组的大小时,它是应用程序的实例变量

[ikub.subscriptions count]

我收到一个错误访问未知的“订阅”getter 方法
我不太确定为什么会这样。

请帮忙!!!!

【问题讨论】:

  • 确保您已将iKubMobileAppDelegate.h 文件导入到使用您的应用代理的文件中。并检查您的应用委托是否具有 subscriptions 属性。此外,作为约定,C 预处理器宏倾向于在 ALL_CAPS 中命名。
  • 检查了以上所有内容,一切正常。此外,将常量更改为全部大写只是为了 1000% 确定,但我得到了同样的错误。 :(

标签: iphone objective-c ios delegates


【解决方案1】:

您需要将宏值括在括号中(否则,宏中的转换将应用于属性,此时该属性是未知的。)所以:

#define ikub ((iKubMobileAppDelegate *)[[UIApplication sharedApplication] delegate])

【讨论】:

  • 我建议使用内联函数而不是宏。这样您就可以正确设置断点,并避免像上面这样的特定于宏的诡计。像静态内联 iKubMobileAppDelegate* ikub() { return [[UIApplication sharedApplication] delegate]; }
  • 小心。 () 在纯 C/Objective-C 中的含义与 (void) 不同。在这种情况下,他想要static inline iKubMobileAppDelegate *ikub(void)。 :)
  • 很好的答案,但你能详细说明宏中的演员吗?
  • @JimThio 我不明白你的问题。
  • 您说宏中的转换适用于属性。什么财产?什么演员?哪一个?谢谢它会帮助我理解。
猜你喜欢
  • 2012-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-17
  • 2014-04-12
  • 2011-04-11
相关资源
最近更新 更多