【问题标题】:Delegate set in View Controller, not maintaining in subview委托在视图控制器中设置,不在子视图中维护
【发布时间】:2010-11-23 08:40:10
【问题描述】:

我之前用太多代码问过这个问题。

ViewController 在 ViewController 中初始化一个 UIView 链,Controller>>View>>SubView。在 SubView 初始化之后,ViewController 被设置为它的代理:

aSubView.delegate = self;

NSLog(@"$@",aSubview.delegate), 返回 ViewController,所以我知道它已设置。

在子视图中,NSLog(@"$@",self.delegate),返回随机垃圾,例如 hr.lproj 或 Foundation 框架的文件路径。

尝试实现任何委托方法时它会崩溃,因为委托没有链接到 ViewController 而是随机性。

这是 SubView.h 文件的样子:

#import "TestDelegate.h"

@interface TestSubView : UIView {

 id<TestDelegate> delegate;
}

@property (assign) id<TestDelegate> delegate;

编辑:ViewController 在应用程序委托中被初始化:

ViewController *controller = [[ViewController alloc] init]; 
[window addSubview:controller.view];
[controller release];

我添加到 App Delegate 的唯一另一件事是导入 ViewController 标头

【问题讨论】:

    标签: iphone cocoa-touch delegates delegation


    【解决方案1】:

    视图控制器对象是否可能在两次调用 NSLog 之间被释放/释放?

    【讨论】:

    • 不要这么认为,因为它是一个链,如果视图控制器被释放,其他所有东西都会被释放,我会告诉你,因为子视图的背景设置为红色
    • 但是视图也被窗口保留,所以如果视图控制器被释放,视图会保留。您是否以任何方式明确保留视图控制器?你是如何实例化它的?
    • 是的,正如预期的那样,你没有做任何事情来保留视图控制器,它正在被释放。在发布声明之前致电window.rootViewController=controller
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-10
    • 2011-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多