我是 iPhone 和 Objective c 的新手。我花了很多时间阅读文档并试图理解事情是如何运作的。我有 RTFM,或者至少正在这个过程中。
我的主要问题是我想了解如何指定事件传递到的位置,而我能够做到这一点的唯一方法是指定委托,但我确信 IB 中有一种更简单/更快的方法。
那么,举个例子。
假设我有 20 个不同的视图和视图控制器以及一个 MyAppDelegate。
我希望能够在 IB 中构建所有这些不同的 Xib 文件,并添加任意数量的按钮和文本字段等,然后指定它们都在 MyAppDelegate 对象中生成一些事件。为此,我在 IB 列表视图的每个视图控制器中添加了一个 MyAppDelegate 对象。然后,我在 XCode 中的 MyAppDelegate 中创建了一个 IBAction 方法,然后返回 IB,并将所有事件链接到每个 Xib 文件中的 MyAppDelegate 对象。
然而,当我尝试运行它时,它只是因错误读取异常而崩溃。
我的猜测是,每个 Xib 文件都放置一个 MyAppDelegate 对象指针,该指针与运行时实际创建的最终 MyAppDelegate 地址无关。
所以我的问题是...我该怎么做?
如果您在每个 nib 文件中创建 MyAppDelegate 的实例,那么,是的,当所有 nib 加载时,您最终会得到该类的许多不同实例。应用程序委托不是通过类甚至协议来标识的,而是通过应用程序实例的指向的对象来标识的。delegate
财产。要找到真正的应用程序委托,您必须向应用程序对象本身询问其委托
您应该让所有视图控制器都继承自具有以下属性的父视图控制器类:appDelegate
财产。实现这样的事情:
#import "MyAppDelegateClass.h"
@interface ViewControllerBaseClass :UIViewController {
MyAppDelegateClass *appDelegate;
}
@property(nonatomic, retain) *appDelegate;
@end
@implementation ViewControllerBaseClass
@synthesize appDelegate;
-(MyAppDelegateClass *) appDelegate{
self.appDelegate=(MyAppDelegateClass *)[[UIApplication sharedInstance] delegate];
return appDelegate;
}
@end
当视图控制器需要应用程序委托时,它只会调用self.appDelegate
。如果您想访问应用程序委托的属性,请使用self.appDelegate.attributeName
.
重要的是您在运行时向应用程序询问其特定的委托实例。你不能从 nib 文件中做到这一点。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)