2011-02-09 4 views
2

У меня есть код, реализованный в моем файле myDocument.m, который просто пытается загрузить последний использованный документ при запуске. Однако при запуске из новой установки (или после удаления последнего использованного файла) окно «нового» документа не появляется. Кто-нибудь знает, что добавить в мой код, чтобы сделать это? Вот оно:Открытие «нового» документа?

- (BOOL)applicationShouldOpenUntitledFile:(NSApplication *)sender 
{ 
    NSURL *lastURL=[[NSDocumentController sharedDocumentController] openDocumentWithContentsOfURL:lastURL display:YES error:nil]; 
    if (lastURL!=nil) 
    { 
    [docController openDocumentWithContentsOfURL:lastURL display:YES error:nil];  
     return NO; 
    } 

    return YES; 
} 

ответ

1
- (BOOL)applicationShouldOpenUntitledFile:(NSApplication *)sender 
{ 
    NSArray* urls = [[NSDocumentController sharedDocumentController] recentDocumentURLs]; 
    if ([urls count] > 0){ 
     NSURL *lastURL= [urls objectAtIndex: 0]; 

     if ([[NSDocumentController sharedDocumentController] openDocumentWithContentsOfURL:lastURL display:YES error:nil]){ 
        return NO; 
      }  

    } 

    return YES; 
} 

EDIT

Я изменил его и попытался его он должен работать.

+0

@Justin - он работает в том смысле, что он открывает последний использованный документ, но когда я очищаю список и открываю приложение, я хочу, чтобы появился новый документ. – Zakman411

+0

Я получил его, просто попробовал. Исключение делалось раньше, но я исправил его. –

+0

Нет необходимости проверять, является ли 'lastURL'' nil', поскольку массивы не могут содержать 'nil'. Кроме того, вы должны проверить возвращаемое значение '-openDocumentWith ...' и вернуть 'NO', если оно отличается от' nil'. –

0

Что такое docController, и почему вы отправляете -openDocumentWithContentsOfURL:display:error: дважды? Обратите внимание, что этот метод возвращает документ, а не URL-адрес, поэтому использование возвращаемого значения в качестве URL-адреса не будет работать.

Ниже уборщик, эквивалентный код:

- (BOOL)applicationShouldOpenUntitledFile:(NSApplication *)sender 
{ 
    id lastDoc = [[NSDocumentController sharedDocumentController] 
     openDocumentWithContentsOfURL:lastURL 
     display:YES error:NULL]; 
    return (lastDoc == nil); 
} 

Однако, это все еще не объясняет, почему вы не получите безымянный документ. Что произойдет, если вы закомментируете -applicationShouldOpenUntitledFile:, чтобы приложение соответствовало стандартным поведением какао? Возможно, проблема кроется в другом месте.

+0

Это действительно вызывает ошибку, поскольку lastURL не объявляется. Должен ли я просто добавить это? – Zakman411

+0

@ Zakman411 Используйте '-recentDocumentURLs', как описано в обновленном ответе Джастина. –

Смежные вопросы