У меня есть класс 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) обычно пишутся с заглавной буквы. Когда вы пишете имена переменных с заглавной буквы, ваш код становится трудным для чтения и понимания, потому что это делает их похожими на имена классов. - person Andrew Madsen   schedule 08.01.2012