我一直在使用一个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问题。
感谢您的帮助。
谢谢, 温斯顿
答案 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的委托指针尚未完全设置。