Objective-C:成员变量正在失去方法调用之间的引用

时间:2010-04-03 07:55:40

标签: objective-c iphone reference

我一直在使用一个Objective-c类,它似乎正在失去同一类方法之间的指针引用。

在MyTableViewController.h文件中,我声明:

@interface SettingsTableViewController : UITableViewController <UITextFieldDelegate>{
    OCRAppDelegate *delegate;
}

MyTableViewController.m文件

- (id) init {
    self = [ super initWithStyle: UITableViewStyleGrouped ];
    delegate = [(OCRAppDelegate *)[[UIApplication sharedApplication] delegate] retain];
}

问题是当“MyTableViewController”视图再次出现并且在同一个类中执行了不同的方法时,委托指针(在init方法期间分配)不再存在。我试图保留,但无济于事。

有人知道为什么会这样,似乎这可能是我遗漏的一个基本的Objective-C问题。

感谢您的帮助。

谢谢, 温斯顿

3 个答案:

答案 0 :(得分:1)

init方法不返回任何内容的事实可能是问题的根源 - 它必须返回'self'。

- (id) init {
    if (self = [super initWithStyle:UITableViewStyleGrouped]) {
        delegate = [(OCRAppDelegate *)[[UIApplication sharedApplication] delegate] retain];
    }
    return self;
}

答案 1 :(得分:0)

当你说它不再存在时,你的意思是什么?它的价值变成了什么?

如果值为0x0(即nil),则会将其更改为nil或始终为nil。你分配它时检查过它不是零吗?也许是NSLog声明。

我怀疑,因为它适用于viewWillAppear方法,而不适用于init方法,因此在调用init方法时,应用委托尚未初始化,因此您实际上是将它设置为零。

答案 2 :(得分:0)

我想我可能找到了答案。

对于类的任何初始化,都应该在ViewDidLoad中完成。在此之前,我相信在init方法中,该类尚未完全设置。

有趣的是,对于我的所有其他视图,在将要加载视图时调用ViewDidLoad,以便存在所有变量/指针。但是,在上面的一个类中,viewdidload方法很早就被调用,并且返回给appate的委托指针尚未完全设置。