Mac App: «Автоматическая загрузка» последнего использованного документа - PullRequest
0 голосов
/ 23 января 2011

В настоящее время я пишу приложение на основе документов, и мне было любопытно, как загрузить по умолчанию последний использованный документ («Файл> Открыть недавний») при запуске приложения?Любая хорошая информация об этом или фрагменты кода?Новичок в Obj-C

Спасибо, Зак

Ответы [ 2 ]

7 голосов
/ 23 января 2011

В вашем делегате приложения вы захотите реализовать 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;
}

Очевидно, приложение какао по умолчанию на основе NSDocument в XCode не поставляется с AppDelegate.Weird.Чтобы добавить один:

  • Добавьте новый класс в свой проект, назовите его MyAppDelegate или как хотите.
  • В интерфейсе для MyAppDelegate добавьте протокол NSApplicationDelegate,это должно выглядеть примерно так:

    @ interface MyAppDelegate: NSObject {}

  • Откройте MainMenu.xib

  • ПеретащитеЭкземпляр объекта в окне xib, экземпляр объекта выглядит как синее поле.
  • Выберите экземпляр объекта и в инспекторе перейдите на вкладку «Идентичность» (синяя буква i)
  • УстановитеКласс к MyAppDelegate
  • Выберите «Приложение» в xib
  • В инспекторе перейдите на вкладку «Подключения» (значок с синей стрелкой) и перетащите из «делегата» в делегат приложения, который вы только чтонастроить.

Вы готовы идти.

0 голосов
/ 29 января 2014

Так что приведенный выше код почти идеален. Единственная проблема, с которой я столкнулся, заключается в том, что если это новое приложение, то список недавнихDocumentURL может быть пустым (или нулевым), поэтому запрос на получение 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 за пределами для пустого массива

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...