【问题标题】:Get localizedName from UIDocument without downloading entire document?从 UIDocument 获取本地化名称而不下载整个文档?
【发布时间】:2018-04-04 22:55:39
【问题描述】:

我有一个基于UIDocument 的应用程序,它显示了存储在 iCloud 中的文档列表。我从NSMetadataItemmetadataItem.value(forAttribute: NSMetadataItemDisplayNameKey) 获取他们的文件名(用于显示)。这些文档包含一个字符串,我已经覆盖了localizedName 属性以生成包含该字符串的更好名称。理想情况下,我想在下载 UIDocument 之前显示它的 localisedName 属性。有没有办法做到这一点?

我将我的UIDocument 存储为FileWrapper,其中包含文档每个部分的FileWrappers。就我而言,这只是一个UIImage 和一个String

我设法在不下载文档的情况下获取缩略图,所以我想知道这个字符串是否有等效的东西。

我使用的是 Swift 4,但我认为这在这里没有任何区别。非常感谢。

【问题讨论】:

    标签: icloud uidocument


    【解决方案1】:

    乔希,

    fileURL.deletingPathExtension().lastPathComponent

    将为您提供未覆盖的本地化名称的等效项。

    我可以从您的帖子中推断出您知道 metadataquery.results 将为您提供 URL 列表。您可以在任何 URL 上使用它。

    仅供参考,在您的 UIDocument 实例化后,未覆盖的本地化名称甚至无法工作,您必须先打开它,这似乎很愚蠢。

    如果你需要一个比这更花哨的名字,而不是基于 fileURL,那么你需要先打开文件,据我所知。

    我知道你理解这一点,但对其他人来说,覆盖本地化名称只是让你将其修改为你想要的字符串,可能基于用户的位置,笑脸。

    使用 fileWrappers 将允许您打开和获取任何存储的变量,而不必打开“大对象”。缩略图曾经以这种方式加载,但由于添加了文件浏览器,因此已升级为云原生。

    您是否有时间将这些打开以在 TableView、CollectionView 中列出?我问的原因是因为当文件打开时 UIDocument 不符合 ARC,将它连接到云的守护程序将保持硬引用,减慢守护程序,我假设,并且如果 TableViewCell 不允许 UIDocument 取消初始化在文件关闭之前重用,即文件指针丢失。

    【讨论】:

    • 谢谢,但我想知道是否可以在无需打开文档的情况下获得自定义的覆盖文档名称,就像我获取缩略图的方式一样。听起来这是不可能的:当我收到新文件存在的通知时,我必须显示一个临时名称(可能是文件名),直到下载足够的数据来生成自定义标题。
    • 你没有说你想如何自定义名称,也许你举个例子。
    • 我的意思是名称将根据可能需要整个文档的内容进行自定义。因此,在拥有或创建(并拥有)该内容的设备上,它会将名称保存为某种元数据,因此新设备可以在下载整个文档之前只下载该名称字符串。
    • 可以使用 NSFileVersion.currentVersionOfItem(at: fileURL) 来查看文件是否在本地缓存,如果为nil则不缓存,TMBABW。每当您在新设备上加载应用程序或设备上尚未加载的任何文件(即由另一台设备创建的文件)时,它们都不会被缓存。他们可能在 URL 中具有私有属性。打开和关闭文件以缓存它,TMBABW。在您的应用程序开始时停止,直到所有文件都被缓存后才让应用程序运行。如果这不会给您带来问题,那么使用 read(fileURL) 来读取缓存的内容非常快。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-30
    • 1970-01-01
    • 2019-04-08
    • 1970-01-01
    • 2019-04-24
    • 2017-02-25
    相关资源
    最近更新 更多