Objective-C:成员变量正在丢失方法调用之间的引用
我一直在处理objective-c类,它似乎正在丢失同一类的方法之间的指针引用 在MyTableViewController.h文件中,我声明:Objective-C:成员变量正在丢失方法调用之间的引用,objective-c,iphone,reference,Objective C,Iphone,Reference,我一直在处理objective-c类,它似乎正在丢失同一类的方法之间的指针引用 在MyTableViewController.h文件中,我声明: @interface SettingsTableViewController : UITableViewController <UITextFieldDelegate>{ OCRAppDelegate *delegate; } 问题是,当“MyTableViewController”视图再次出现,并且在同一个类中执行不同的方法时,
@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,谢谢您的回复。事实上,我很抱歉,但我输入了一段代码片段,没有输入“返回自我”。不管怎样,我似乎有下面的答案,看起来它解决了这个问题。谢谢,温斯顿,谢谢你的回复。事实上,我很抱歉,但我输入了一段代码片段,没有输入“返回自我”。不管怎样,我似乎有下面的答案,看起来它解决了这个问题。谢谢,温斯顿