UIManagedDocument и дополнительный контент

У меня есть приложение на основе документов (несколько документов, каждый из которых имеет собственное постоянное хранилище основных данных). Я использую UIManagedDocument для его разработки.

Каждый документ представляет собой рисунок, и я хочу иметь возможность сохранять предварительный просмотр (UIImage) каждого рисунка.

Поскольку я хочу показать scrollView со всеми предварительными просмотрами, я думаю, мне не следует помещать предварительный просмотр в базу данных, поэтому я использую функцию дополнительного содержимого UIManagedDocument, как описано здесь.

У меня есть пара вопросов:

  • Какая польза от параметра «absoluteURL» в additionalContentForURL:error:? Это не используется в примере, который я связал.

  • Как получить предварительный просмотр, не открывая документ? В настоящее время я делаю это:

.

NSString* docName = [[[DocumentStore sharedStore] documentsList] 
                                    objectAtIndex:indexPath.row];

NSString* dataDirectory = [FileUtils privateDataDirectory];
NSString *dataPath = [dataDirectory stringByAppendingPathComponent:docName];
NSString *imagePath = [dataPath 
             stringByAppendingPathComponent:@"AdditionalContent/thumb.png"];

UIImage * preview = [UIImage imageWithContentsOfFile:imagePath];

... но я не уверен, что это лучший способ сделать это.


person Odrakir    schedule 27.01.2013    source источник
comment
Мне бы очень хотелось узнать, почему за это проголосовали, и до сих пор у меня нет ответа. Что мне не хватает?   -  person Odrakir    schedule 25.02.2013
comment
Что вы имеете в виду, не открывая документ? В какой момент кода открывается документ для получения предварительного просмотра?   -  person Greg    schedule 03.05.2013
comment
В выложенном коде он не открывается. Но то, что я делаю, кажется не совсем правильным (доступ к папке внутри пути документа). Я не уверен, что так и должно быть.   -  person Odrakir    schedule 06.05.2013
comment
Доступ к файлам внутри пути документа абсолютно прекрасен. Сам документ в этот момент еще не загружен в память, поэтому в этом нет ничего плохого, вам просто нужно быть уверенным, что вы правильно обрабатываете случаи, когда этот файл не существует внутри документа по какой-либо причине.   -  person Greg    schedule 07.05.2013
comment
Хорошо спасибо. Мне просто кажется странным, что UIManagedDocument имеет механизм для сохранения дополнительных данных, но не для их извлечения. Но если вы говорите, что все в порядке, я просто должен вам поверить :)   -  person Odrakir    schedule 08.05.2013
comment
Если вы открываете документ, переопределите readAdditionalContentFromURL:error: в своем подклассе, чтобы читать данные из контейнера дополнительного содержимого. developer.apple.com/library/ios /#документация/uikit/ссылка/   -  person Greg    schedule 09.05.2013
comment
Если вы хотите получить данные из пакета, фактически не открывая документ, вы можете получить их напрямую, как вы делаете сейчас, например. когда вы хотите показать предварительный просмотр в списке. Но когда вы на самом деле открываете документ, вам нужно переопределить readAdditionalContentFromURL:error: для фактического чтения данных при создании экземпляра объекта документа.   -  person Greg    schedule 09.05.2013
comment
Ознакомьтесь с этим ответом для получения более подробной информации о том, как реализовать дополнительный контент для документа: stackoverflow.com/a/8901963/834998 . Помните, что это происходит, когда документ фактически открывается и загружается. Если вы хотите просто отображать предварительный просмотр для всех пользовательских документов, вы не хотите загружать и открывать каждый из них только для предварительного просмотра, поэтому то, что вы делаете, будет работать в этом случае.   -  person Greg    schedule 09.05.2013


Ответы (1)


  1. Параметр absoluteURL в additionalContentForURL:error: дает вам абсолютный URL-адрес, на который будет записан дополнительный контент.

    В большинстве случаев это не особенно необходимый параметр, так как вам не нужно знать, куда будут записываться эти данные, но он может быть полезен в качестве идентификатора в некоторых малопонятных случаях использования с глобальной системой управления контентом, независимой от документ (хотя это, вероятно, не будет очень структурно)

  2. Метод, который вы в настоящее время используете для получения предварительных просмотров документов, должен быть в порядке, если вы реализуете меры безопасности, чтобы ваше приложение не аварийно завершало работу или не проявляло неопределенное поведение, если ресурс предварительного просмотра не существует по пути, где вы ожидаете, для какая бы ни была причина.

    Другой способ получить предварительный просмотр — загрузить каждый документ, инициализировать его, реализовать readAdditionalContentFromURL:error: в классе документа для чтения предварительного просмотра и поместить его в свойство, затем получить значение этого свойства и использовать его в качестве предварительного просмотра. Однако для этого потребовалась бы загрузка каждого отдельного документа в память только для получения предварительного просмотра, поэтому я бы не рекомендовал этого делать, так как это может иметь серьезные последствия для производительности.

Общее руководство по обработке дополнительного контента в UIManagedDocument см. в этом ответе на этот вопрос.

person Greg    schedule 11.05.2013