我的appDelegate实例化了myClass,我有另一个类,myClass实例化了newClass。从newClass实例,我想访问创建它的myClass实例中的属性。我这样做了:
[[[UIApplication sharedApplication].delegate myClass] property]
这很有效,我实际上可以获得该属性但是我从Xcode收到了这个警告:
warning: "-myClass" not found in protocols
warning: no "-myClass" method found
(messages without a matching signature will be assumed to return "id" and accept "..." as arguments)
new.class属性已在.h和.m文件中正确声明,它的属性已设置并已合成。
它编译并运行,我实际上可以获得该属性的值。
我应该忽略Xcode中的警告吗?
有没有更好的方法来访问myClass实例的属性?
答案 0 :(得分:4)
查看 - [UIApplication delegate]的文档。请注意,它的返回类型为:
id <UIApplicationDelegate>
因此,您对退回对象的所有了解都是符合此协议的。然后,假设代表响应-myClass
消息,而不是编译器愿意做出的消息,这就是信念的飞跃。
你可以稍微破解它,就像这样工作:
[[(MyAppDelegateClass *)[[UIApplication sharedApplication] delegate] myClass] property]
但这将是不好的做法。相反,我建议你让你的应用程序委托一个单身人士,你可以这样做:
[[[MyAppDelegateClass sharedApplicationDelegate] myClass] property]
答案 1 :(得分:0)
我认为在编译时Xcode无法实现属性和普通Objective-C的飞跃。它无法找到属性,所以只是假设你知道你在做什么并填补空白。在运行时,事情显然是可以的。
请改为尝试:
[[[[UIApplication sharedApplication] delegate] myClass] property];
顺便说一下,所以你自己的代码中没有这样的代码,我通常会在app delegate的标题中执行#define:
#define APPDELEGATE (myAppDelegate *)[[UIApplication sharedApplication] delegate]
然后在代码中我可以去:
[[APPDELEGATE myClass] property];