2010-04-03 53 views
1

我一直有一个objective-c类似乎失去了它在同一类的方法之间的指针引用。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

当你说这是不是不再有,你是什么意思?它的价值有什么变化?

如果该值为0x0(即nil),或者将其更改为nil或始终为nil。你有没有检查过,当你指定它不是零?也许与NSLog声明。

我怀疑,因为它工作在viewWillAppear方法,但不是在init方法,应用程序的委托尚未在点init初始化方法被调用,所以你实际上是将其设置为零。

+0

Hello invariant, 该值更改为0x0。 然而,当我添加 “代表= [......]” 行到viewWillAppear中方法 - (无效)viewWillAppear中:(BOOL)动画{ \t [超级viewWillAppear中:动画]; \t委托=(OCRAppDelegate *)[[UIApplication sharedApplication]委托]; } 它的工作原理。非常感谢您的快速响应! Winston – Winston 2010-04-03 08:03:05

+0

嗨,好的,我根据这个编辑了答案。 – 2010-04-03 08:11:18

+0

我可以确认,当我使用XCode进行调试并转到 - (id)init函数时,代理指针设置正确。但是,在重新输入.m类中的另一个函数时,它会丢失。它几乎就像UIViews被更改时一样,任何指针引用都会丢失。 在我的应用程序委托中,我所做的唯一的事情是: \t NSString * path = [[NSBundle mainBundle] pathForResource:@“Settings”ofType:@“plist”]; \t NSMutableDictionary * dict = [[NSMutableDictionary alloc] initWithContentsOfFile:path]; \t self.settings = dict; \t [字典发布]; \t OCRsettings = [设置objectForKey:@“OCR”]; – Winston 2010-04-03 09:12:34

1

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

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

Hi dbarker, 感谢您的回复。其实,我很抱歉,但是我放入了一段代码,并将“返回自己”退出。 无论如何,看起来我确实有下面的答案看起来像解决了问题。感谢, 温斯顿 – Winston 2010-04-06 00:40:16

0

我想我可能找到了答案。

对于该类的任何初始化,应该在ViewDidLoad中完成。在此之前,我相信在init方法中,这个类还没有完全建立。

有趣的是我的所有其他视图,ViewDidLoad在视图即将被加载时被调用,因此我所有的变量/指针都存在。但是,在上面的一个类中,viewdidload方法很早就被调用,并且返回到应用程序委托的委托指针尚未完全设置。