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

Objective-C:成员变量正在丢失方法调用之间的引用,objective-c,iphone,reference,Objective C,Iphone,Reference,我一直在处理objective-c类,它似乎正在丢失同一类的方法之间的指针引用 在MyTableViewController.h文件中,我声明: @interface SettingsTableViewController : UITableViewController <UITextFieldDelegate>{ OCRAppDelegate *delegate; } 问题是,当“MyTableViewController”视图再次出现,并且在同一个类中执行不同的方法时,

我一直在处理objective-c类,它似乎正在丢失同一类的方法之间的指针引用

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

@interface SettingsTableViewController : UITableViewController <UITextFieldDelegate>{
    OCRAppDelegate *delegate;
}
问题是,当“MyTableViewController”视图再次出现,并且在同一个类中执行不同的方法时,委托指针(在init方法期间分配的)不再存在。我试图留住他,但没有成功

有谁知道这是为什么,这似乎是一个基本的客观C问题,我错过了

谢谢你的帮助

谢谢,
温斯顿

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

如果该值为
0x0
(即
nil
),则可能是某个因素将其更改为
nil
,或始终为
nil
。分配时是否已检查它是否为零?可能使用
NSLog
语句


我怀疑,由于它在
视图中将出现
方法中工作,而不是在
init
方法中工作,因此在调用
init
方法时,应用程序委托尚未初始化,因此您实际上将其设置为nil。

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

如果该值为
0x0
(即
nil
),则可能是某个因素将其更改为
nil
,或始终为
nil
。分配时是否已检查它是否为零?可能使用
NSLog
语句


我怀疑,由于它在
视图中工作,将出现
方法,但在
init
方法中不起作用,应用程序委托尚未在调用
init
方法时初始化,因此您实际上将其设置为nil。

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

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

init方法不返回任何东西这一事实可能是问题的根源——它必须返回“self”

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

我想我可能已经找到了答案

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


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

我想我可能已经找到了答案

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


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

Hello invariant,值更改为0x0。但是,当我将“delegate=[…]”行添加到ViewWillAspect方法-(void)viewWillAspect:(BOOL)animated{[super viewWillAspect:animated];delegate=(OCRAppDelegate*)[[UIApplication sharedApplication]delegate];}它可以工作。非常感谢您的快速回复!WinstonI可以确认,当我使用XCode进行调试并转到-(id)init函数时,委托指针设置正确。但是,在.m类中重新输入另一个函数时,它将丢失。这几乎就像当UIView被更改时,任何指针引用都会丢失一样。在我的应用程序委托中,我唯一要做的事情是:NSString*path=[[NSBundle mainBundle]pathForResource:@“Settings”of type:@“plist”];NSMutableDictionary*dict=[[NSMutableDictionary alloc]initWithContentsOfFile:path];self.settings=dict;[听写释放];OCRsettings=[settings objectForKey:@“OCR”];Hello不变量,值更改为0x0。但是,当我将“delegate=[…]”行添加到ViewWillAspect方法-(void)viewWillAspect:(BOOL)animated{[super viewWillAspect:animated];delegate=(OCRAppDelegate*)[[UIApplication sharedApplication]delegate];}它可以工作。非常感谢您的快速回复!WinstonI可以确认,当我使用XCode进行调试并转到-(id)init函数时,委托指针设置正确。但是,在.m类中重新输入另一个函数时,它将丢失。这几乎就像当UIView被更改时,任何指针引用都会丢失一样。在我的应用程序委托中,我唯一要做的事情是:NSString*path=[[NSBundle mainBundle]pathForResource:@“Settings”of type:@“plist”];NSMutableDictionary*dict=[[NSMutableDictionary alloc]initWithContentsOfFile:path];self.settings=dict;[听写释放];OCRsettings=[settings objectForKey:@“OCR”];您好,dbarker,谢谢您的回复。事实上,我很抱歉,但我输入了一段代码片段,没有输入“返回自我”。不管怎样,我似乎有下面的答案,看起来它解决了这个问题。谢谢,温斯顿,谢谢你的回复。事实上,我很抱歉,但我输入了一段代码片段,没有输入“返回自我”。不管怎样,我似乎有下面的答案,看起来它解决了这个问题。谢谢,温斯顿