【发布时间】:2012-01-08 15:38:03
【问题描述】:
我有一个 NSDocument 类,我需要在其中访问主菜单窗口,即在应用启动时打开的那个。当我从应用程序在该窗口中操作时,一切似乎都可以工作,但是当尝试从readFromFileWrapper:ofType:error: 执行相同的操作时,我访问的窗口似乎为零。为什么会这样?
编辑:处理这个的一些代码:
- (BOOL)readFromFileWrapper:(NSFileWrapper *)fileWrapper ofType:(NSString *)typeName error:(NSError **)outError
{
if([[NSFileManager alloc] fileExistsAtPath:[NSString stringWithFormat:@"%@/Project.plist",[[self fileURL] path]]]) {
NSLog(@"%@", [[self fileURL] path]);
NSDictionary *project = [NSDictionary dictionaryWithContentsOfFile:[NSString stringWithFormat:@"%@/Project.plist",[[self fileURL] path]]];
if([[project objectForKey:@"type"] isEqualToString:@"vote"]) {
[self openProject:[[self fileURL] path] type:@"vote"];
return YES;
} else if([[project objectForKey:@"type"] isEqualToString:@"quiz"]) {
[self openProject:[[self fileURL] path] type:@"quiz"];
return YES;
} else {
return NO;
}
} else {
return NO;
}
}
那是我的readFromFileWrapper:ofType:error: 方法。这是我的openProject:type: 方法:
-(void)openProject:(NSString *)filepath type:(NSString *)type
{
NSLog(@"Opening project @ %@",filepath);
NSLog(@"%@", [MainWindow description]);
[projectDesignerView setFrame:[[[[MainWindow contentView] subviews] objectAtIndex:0] frame]];
[projectDesignerToolbar setFrame:[MainWindow frame] display:FALSE];
[[MainWindow contentView] replaceSubview:[[[MainWindow contentView] subviews]objectAtIndex:0] with:projectDesignerView];
[[projectDesignerToolbar toolbar] setShowsBaselineSeparator:YES];
[MainWindow setToolbar:[projectDesignerToolbar toolbar]];
[MainWindow setRepresentedFilename:filepath];
[MainWindow setTitle:[NSString stringWithFormat:@"%@ - %@", [[filepath lastPathComponent] stringByDeletingPathExtension], [projectDesignerToolbar title]]];
NSString *path = [[NSBundle mainBundle] pathForResource:@"projectDesigner" ofType:@"html"];
NSURL *url = [NSURL fileURLWithPath:path];
[[projectDesignerWebview mainFrame] loadRequest:[NSURLRequest requestWithURL:url]];
}
NSLog(@"%@", [MainWindow description]); 返回 nil,此时 MainWindow 应该是主应用程序窗口。我认为问题在于双击文件会重新分配所有文件,因此失败了。
【问题讨论】:
-
请发布您的代码,以便我们能够准确了解您在做什么,但它不能正常工作。
-
问题是我不知道要准确发布什么代码。我试试
-
我刚刚发布的代码有什么线索吗?
-
你在哪里初始化/设置
MainWindow?此外,MainWindow可能应该称为mainWindow。将变量名大写是不好的风格。类名(例如 NSString)通常大写。当您将变量名大写时,它会使您的代码难以阅读和遵循,因为它使它们看起来像类名。 -
MainWindow 是一个连接到 MainMenu.xib 中的 Window 的插座。关于命名,是的,我认为这样称呼会更好,但是写的很匆忙,没有时间更改它:)
标签: macos cocoa nswindow nsdocument