Получить localizedName из UIDocument без загрузки всего документа?

У меня есть приложение на основе UIDocument, которое показывает список документов, хранящихся в iCloud. Я получаю их имена файлов (для отображения) из NSMetadataItem с metadataItem.value(forAttribute: NSMetadataItemDisplayNameKey). Документы содержат строку, и я переопределил свойство localizedName, чтобы получить лучшее имя, содержащее эту строку. В идеале я хотел бы показать свойство localisedName UIDocument до того, как оно будет загружено. Есть ли способ сделать это?

Я храню свои UIDocument как FileWrapper, содержащие FileWrapper для каждой части документа. В моем случае это просто UIImage и String.

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

Я использую Swift 4, но я не думаю, что это имеет какое-либо значение. Большое спасибо.


person Josh Paradroid    schedule 24.10.2017    source источник


Ответы (1)


Джош,

fileURL.deletingPathExtension().lastPathComponent

даст вам эквивалент непереопределенного localizedName.

Из вашего сообщения я могу сделать вывод, что вы знаете, что ваш metadataquery.results даст вам список URL-адресов. Вы можете использовать это на любом URL.

К вашему сведению, непереопределенное localizedName не будет работать даже после создания экземпляра вашего UIDocument, вы должны сначала открыть его, что кажется глупым.

Если вам нужно сделать имя более причудливым и не основанным на URL-адресе файла, вам нужно будет сначала открыть файл, насколько я могу судить.

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

Использование файловых оберток позволит вам открыть и получить любую сохраненную переменную, и вам не придется открывать «Большой объект». Раньше миниатюры загружались таким образом, но теперь они стали нативными для облака, поскольку они добавили файловый браузер.

Вам не хватает времени, чтобы открыть их для списка в TableView, CollectionView? Причина, по которой я спрашиваю, заключается в том, что UIDocument не совместим с ARC, пока файл открыт, Deamon, который подключает его к облаку, будет сохранять жесткую ссылку, замедляя работу Deamon, я полагаю, и не позволяя UIDocument деинициализировать, если TableViewCell повторно используется до закрытия файла, т. е. указатель на документ теряется.

person Sojourner9    schedule 03.11.2017
comment
Спасибо, но мне было интересно, могу ли я получить свое собственное, переопределенное имя документа, не открывая документ, как я получаю миниатюру. Похоже, это невозможно: когда я получаю уведомление о том, что существует новый файл, мне нужно будет показывать временное имя (возможно, имя файла), пока не будет загружено достаточно данных для создания пользовательского заголовка. - person Josh Paradroid; 06.11.2017
comment
Вы не сказали, как вы хотели настроить имена, может быть, если бы вы привели пример. - person Sojourner9; 08.11.2017
comment
Я имею в виду, что имя будет настроено на основе чего-то, для чего может потребоваться весь документ. Таким образом, на устройстве, которое имеет или создало (и имеет) этот контент, оно сохранит имя как своего рода метаданные, чтобы новое устройство могло загрузить только эту строку имени перед загрузкой всего документа. - person Josh Paradroid; 08.11.2017
comment
Вы можете использовать NSFileVersion.currentVersionOfItem(at: fileURL), чтобы узнать, кэшируется ли файл локально, если он равен нулю, то он не кэшируется, TMBABW. Каждый раз, когда вы загружаете свое приложение на новое устройство или для любых файлов, которых еще нет на вашем устройстве, т. е. созданных другим устройством, они не кэшируются. У них, вероятно, будет частный адрес в URL. Открытие и закрытие файла для его кэширования, TMBABW. Остановите в начале вашего приложения, чтобы приложение не запускалось, пока все файлы не будут кэшированы. Если это не вызывает у вас проблем, используйте read(fileURL) для чтения кэшированного содержимого, что очень быстро. - person Sojourner9; 17.11.2017