1

我有 myClass 由我的 appDelegate 实例化,我有另一个类 newClass 由 myClass 实例化。从 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)

newClass 属性已在 .h 和 .m 文件中正确声明,它的属性已设置并已合成。

它编译并运行,我实际上可以获得属性的值。

我应该忽略 Xcode 中的警告吗?

有没有更好的方法来访问 myClass 实例的属性?

4

2 回答 2

4

查看 -[UIApplication delegate] 的文档。请注意,它的返回类型为:

id <UIApplicationDelegate>

因此,关于返回的对象,您所知道的只是它符合此协议。然后假设委托响应-myClass消息,而不是编译器愿意做出响应,这无异于信仰的飞跃。

你可以稍微破解它来像这样工作:

[[(MyAppDelegateClass *)[[UIApplication sharedApplication] delegate] myClass] property]

但这将是不好的做法。相反,我建议你让你的应用程序委托一个单例,这样你就可以这样做:

[[[MyAppDelegateClass sharedApplicationDelegate] myClass] property]
于 2009-05-13T18:05:01.467 回答
0

我认为在编译时 Xcode 不能从属性和普通的 Objective-C 中实现飞跃。它找不到该属性,因此只会假设您知道自己在做什么并填写空白。在运行时,事情显然没问题。

试试这个:

[[[[UIApplication sharedApplication] delegate] myClass] property];

顺便说一句,所以你自己的代码中没有这样的代码我通常在应用程序委托的标题中执行#define:

#define APPDELEGATE (myAppDelegate *)[[UIApplication sharedApplication] delegate]

那么在代码中我可以去:

[[APPDELEGATE myClass] property];
于 2009-05-13T03:23:51.543 回答