我目前正在编写一个基于文档的应用程序,并且很想知道如何在应用程序启动时默认加载最近使用过的文档('File> Open Recent'部分)?有关此代码段或代码段的任何好消息吗? Obj-C新手
谢谢, 扎克
答案 0 :(得分:7)
在您的应用程序委托中,您需要实现applicationShouldOpenUntitledFile:
- (BOOL)applicationShouldOpenUntitledFile:(NSApplication *)sender
{
NSURL *lastURL=[[[NSDocumentController sharedDocumentController] recentDocumentURLs] objectAtIndex:0];
if (lastURL!=nil)
{
[[NSDocumentController sharedDocumentController] openDocumentWithContentsOfURL:lastURL display:YES error:nil];
return NO;
}
return YES;
}
显然,XCode中默认的基于NSDocument的cocoa应用程序没有AppDelegate。奇怪的。添加一个:
在MyAppDelegate的界面中,添加协议NSApplicationDelegate,它应该如下所示:
@interface MyAppDelegate:NSObject< NSApplicationDelegate> { }
打开MainMenu.xib
你现在好了。
答案 1 :(得分:0)
所以上面的代码几乎是完美的。我遇到的唯一问题是,如果这是一个新的应用程序,那么recentDocumentURL的列表可能是空的(或零),因此要求获取nil数组的objectAdIndex:0将导致问题。我建议在方法声明之后立即输入以下代码。
NSArray *list = [[NSDocumentController sharedDocumentController] recentDocumentURLs];
if ((list == nil) || ([list count] == 0))
return YES;
我想避免的错误如下:
2014-01-28 17:02:33.042 jNotebook [8144:303] * - [__ NSArrayM objectAtIndex:]:索引0超出空数组的界限