gpt4 book ai didi

iphone - 高效使用 Interface Builder

转载 作者:行者123 更新时间:2023-12-03 19:40:49 25 4
gpt4 key购买 nike

我是 iPhone 和 objective-c 的新手。我花了很多时间阅读文档并试图理解事情是如何运作的。我有 RTFM,或者至少正在这个过程中。

我的主要问题是我想了解如何指定事件传递到的位置,而我能够做到这一点的唯一方法是指定委托(delegate),但我确信 IB 中有一种更简单/更快的方法。

举个例子。假设我有 20 个不同的 View 和 View Controller 以及一个 MyAppDelegate。我希望能够在 IB 中构建所有这些不同的 Xib 文件,并添加任意数量的按钮和文本字段等,然后指定它们都在 MyAppDelegate 对象中生成一些事件。为此,我在 IB ListView 的每个 View Controller 中添加了一个 MyAppDelegate 对象。然后我在 XCode 中的 MyAppDelegate 中创建了一个 IBAction 方法,然后返回 IB 并将所有事件链接到每个 Xib 文件中的 MyAppDelegate 对象。

但是,当我尝试运行它时,它只是因错误读取异常而崩溃。

我的猜测是,每个 Xib 文件都放置一个 MyAppDelegate 对象指针,该指针与运行时实际创建的最终 MyAppDelegate 地址无关。

所以我的问题是......我该怎么做?!!!

最佳答案

如果您在每个 nib 文件中创建 MyAppDelegate 的实例,那么,是的,当所有 nib 加载时,您最终会得到该类的许多不同实例。应用程序委托(delegate)不是通过类甚至协议(protocol)来标识的,而是通过应用程序实例的 delegate 属性指向的对象来标识的。要找到真正的应用程序委托(delegate),您必须向应用程序对象本身询问其委托(delegate)

您应该让所有 View Controller 都继承自具有 appDelegate 属性的父 View Controller 类。实现这样的事情:

#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

当 View Controller 需要应用程序委托(delegate)时,它只需调用self.appDelegate。如果您想访问应用程序委托(delegate)的属性,请使用 self.appDelegate.attributeName 。

重要的是您在运行时向应用程序询问其特定的委托(delegate)实例。你不能从 nib 文件中做到这一点。

关于iphone - 高效使用 Interface Builder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2710062/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com