在正确的初始化之后,nsdocument子类变量以某种方式重置为nil:为什么?

时间:2012-06-30 21:22:01

标签: macos cocoa nsdocument nswindowcontroller

我有一个消失的指针 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 的值。这是零,但我没有想法为什么。任何人都可以向我解释这个吗?

1 个答案:

答案 0 :(得分:2)

您可以实现一个惰性访问器:

- (MW_db *)db
{
    if (db == nil) {
        db = [[MW_db alloc] init];
    }
    return db;
}

然后用它代替ivar:

workerController = [[MW_WorkerWindowController alloc] initWithDb:[self db]];