사라진 포인터가 있습니다 db; 값은 NSDocument
생성 중에 적절하게 설정되었지만 서브 윈도우를 열려고하는 순간에 값은 nil
으로 변경되었습니다!nsdocument 서브 클래스 변수는 초기화 후에 nil로 재설정됩니다. 이유는 무엇입니까?
@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
}
}
데시벨에게 점을 무기 호 이외의 진정한 주소에서 나는 NSDocument
서브 클래스에 다음 있습니다.
- (IBAction)showWorkerManagementWindow:(id)sender
{
if (!workerController) {
workerController = [[MW_WorkerWindowController alloc] initWithDb:db];
}
[workerController showWindow:self];
}
내가 첫 번째 줄에 브레이크 포인트를 넣어 dB의 값을보고 :
은 나중에, 나는 창을 열고이이 같은 NSDocument
서브 클래스의 구현에 할. 그것은 아무 것도 아니지만, 아니오 아이디어가 있습니다. 아무도 나에게 이것을 설명 할 수 있습니까?
당신이'windowControllerDidLoadNib에 중단 점을 설정하려고 있나요? 좀 더 구체적으로 말하면,'db = [[MW_db alloc] init];은 실제로 *'* workerController = [[MW_WorkerWindowController alloc] initWithDb : db]; 'workerController'가'- [showWindow :]'호출까지 NIB를로드하지 않을 수도 있습니다. – Stream