我有一个消失的指针 db ;在创建NSDocument
期间正确设置了该值,但是当我想要打开子窗口时,该值已更改为nil
!我在NSDocument
子类中有以下内容:
@interface MW_Document : NSDocument
{
MW_WorkerWindowController *workerController;
__strong MW_db *db;
}
- (IBAction)showWorkerManagementPanel:(id)sender;
//- (IBAction)showSkillManagementPanel:(id)sender;
实现包含:
- (void)windowControllerDidLoadNib:(NSWindowController *)aController
{
[super windowControllerDidLoadNib:aController];
if (![self db]) {
db = [[MW_db alloc] init];
NSLog ( @"Debug - Init of db: [%ld]", db ); // never mind the casting problem
}
}
db 指向nil以外的其他内容,这是一个真正的地址。
稍后,我想打开一个窗口并在同一个NSDocument
子类的实现中使用它:
- (IBAction)showWorkerManagementWindow:(id)sender
{
if ( !workerController) {
workerController = [[MW_WorkerWindowController alloc] initWithDb:db];
}
[workerController showWindow:self];
}
我在第一行放了一个断点,然后查看 db 的值。这是零,但我没有想法为什么。任何人都可以向我解释这个吗?
答案 0 :(得分:2)
您可以实现一个惰性访问器:
- (MW_db *)db
{
if (db == nil) {
db = [[MW_db alloc] init];
}
return db;
}
然后用它代替ivar:
workerController = [[MW_WorkerWindowController alloc] initWithDb:[self db]];