Swift 使用元数据将应用程序对象链接到磁盘上的文件
以下是本主题: 我的应用程序正在使用PDFKit保存文件 我正在尝试将自定义密钥元数据设置为保存在设备上的PDFDocument。 我的应用程序中的对象(“测试”)有两个重要属性:Swift 使用元数据将应用程序对象链接到磁盘上的文件,swift,pdfkit,file-manager,Swift,Pdfkit,File Manager,以下是本主题: 我的应用程序正在使用PDFKit保存文件 我正在尝试将自定义密钥元数据设置为保存在设备上的PDFDocument。 我的应用程序中的对象(“测试”)有两个重要属性: id:能够检索磁盘上文件的UUID(链接的磁盘上文件URL是此_UUID.jpg) 名称:用户设置的可读字符串 这会导致一些问题: 文件名是一个UUID,不能被人读取,因此用户体验不好 如果用户重命名该文件,应用程序将无法获取该文件 因此,id为文件提供了一个人类可读的标签。因此,当用户打开文件应用程序时,他可以
- id:能够检索磁盘上文件的UUID(链接的磁盘上文件URL是此_UUID.jpg)
- 名称:用户设置的可读字符串
//首先我创建自己的属性
fileprivate扩展PDFDocumentAttribute{
静态let testId=PDFDocumentAttribute(rawValue:“com.sc.testId”)
}
//然后在保存文件之前,在“test”类中设置新闻属性
func setDocument(pdf:pdf文档){
让fileURL=self.getPDFDocumentURL()
打印(“元数据是\(pdf.documentAttribute)”//打印一个空字典
pdf.documentAttribute?[PDFDocumentAttribute.testId]=self.id
pdf.documentAttributes?[PDFDocumentAttribute.titleAttribute]=self.name//我想是文档的ddisplay名称?不是,那是什么?
打印(“元数据现在是\(pdf.documentAttributes)”//两者都已打印,看起来还可以
//write(to:fileURL)//我也测试了这个,同样的问题
让data=pdf.dataRepresentation()
做{
尝试数据?写入(到:fileURL,选项:.completeFileProtection)
}抓住{
打印(错误。本地化描述)
}
}
从这里看起来不错,当我想要检索pdf文档时,我会在文件夹中检查每个文档的id,并在id匹配时返回文档。但问题是,当我获取文档属性时,“testId”属性不在其中。请注意,本机标题设置正确。
所以我可以从那里得到身份证,但那看起来很不合适
//仍在“测试”类中
func getPDFDocument()->PDFDocument?{
//获取文件夹中的所有文档并检查每个文档的元数据
让fileManager=fileManager.default
让documentsURL=fileManager.URL(对于:.documentDirectory,在:.userDomainMask中)[0]
做{
让fileurl=try fileManager.contentsOfDirectory(位于:SchoolTest.getSubjectFolderURL(主题:self.subject!),包括属性forkeys:nil)
用于文件url中的url{
打印(“文档属性为:\(PDFDocument(url:url)?.documentAttribute)”//包含苹果预设的标题和其他内容,但不包含我的自定义“testId”
如果让doc=PDFDocument(url:url),doc.documentAttribute?[PDFDocumentAttribute.titleAttribute/*testId*/]as?String==self.documentName{
退货单//此项工作为临时工作
}
}
}抓住{
打印(“枚举文件时出错\(documentsURL.path):\(Error.localizedDescription)”)
}
归零
}
显示名称:
当前,文件应用程序中显示的显示名称/标签是文件名(来自URL)。
这也会导致问题,因为如果两个“测试”具有相同的名称,那么它们的链接文件将具有相同的URL。因此,当最近的一个将被保存在磁盘上时,它将覆盖另一个。
这是我在为文件URL使用“Test”id属性时没有遇到的问题。
如果我可以为文件设置一个显示名,并使用UUID保留URL,那么应该可以解决这个问题。
目录也有同样的本地化问题,我用英语给它们命名,但苹果本地目录是本地化的。本地化名称对于用户体验来说可能很好。
经过数小时的研究,我找不到一种方法来对我的文件/目录进行本地化或应用显示名称
//我试过了,但没有结果
var url=文件url作为NSURL
尝试url.setResourceValue(“本地化标签”,forKey:.localizedLabelKey)
打印(“本地化名称为\(尝试url.resourceValues(forKeys:[.localizedLabelKey]))”)
让newURL=url作为url
尝试数据?写入(到:newURL,选项:.completeFileProtection)
我做得不好吗?在向文件中添加自定义metada时,我们应该怎么做