2014-01-22 2 views
0

Например, пользователь открывает 10 документов в моем приложении.
При возобновлении краха приложения при повторном открытии одного из этих 10 документов.
На следующем запуске пользователь получит сообщение: «В последний раз, когда вы открыли« ApplicationName », он неожиданно завершает работу ...».Как узнать, какой документ разбился при повторном открытии?

Мне нужно обработать, с каким словом упаковано приложение документа, и уведомить пользователя о том, что, например, «document10 не может быть повторно открыт ...» и повторно открыть 9 документов.

Пожалуйста, помогите. Об этом я ничего не нашел в документации по какао.

И извините за мой английский, это мой второй язык.

ответ

0

При открытии документов просто сохраните текущий URL документа по умолчанию пользователя, скажем LastAttemptedOpenURL, а затем установите его значение null после открытия документа. Затем при запуске проверьте этот ключ, и если он не является нулевым, предположим, что документ разбил приложение.

0

Вы имеете полный контроль над кодом, который считывает данные в пределах NSDocument класса (например, метод -readFromURL:ofType:error:outError), так что это звучит, как вам нужно больше контроля ошибок и, возможно, некоторые обработки исключений в этих методах:

- (BOOL)readFromURL:(NSURL *)absoluteURL 
      ofType:(NSString *)typeName 
       error:(NSError **)outError { 

    @try { 
     // Do read 
    } @catch(NSException *ex) { 

     if (outError) { 
      NSMutableDictionary *errorDetail = [NSMutableDictionary dictionary]; 
      [errorDetail setValue:@"Something bad happened" 
          forKey:NSLocalizedDescriptionKey]; 
      *outError = [NSError errorWithDomain:@"MyErrorDomain" 
              code:100 
             userInfo:errorDetail]; 
     } 
     return NO; 
    } 

    return YES; 
} 

Все сложнее, если вы решите сделать асинхронное чтение, однако по-прежнему можно избежать аварии в потенциально опасных зонах.

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