SetUbiquitous 为不存在的文件显示“文件已存在”
Posted
技术标签:
【中文标题】SetUbiquitous 为不存在的文件显示“文件已存在”【英文标题】:SetUbiquitous showing 'file already exists' for file that doesn't 【发布时间】:2016-10-07 18:20:26 【问题描述】:在AppDelegate.swift
中,首次启动时,目的是将一些示例文档放置在本地 Documents 文件夹中,如果启用了 iCloud,则放置在 iCloud Documents 文件夹中。
var templates = NSBundle.mainBundle().pathsForResourcesOfType(AppDelegate.myExtension, inDirectory: "Templates")
dispatch_async(appDelegateQueue)
self.ubiquityURL = NSFileManager.defaultManager().URLForUbiquityContainerIdentifier(nil)
if self.ubiquityURL != nil && templates.count != 0
// Move sample documents from Templates to iCloud directory on initial launch
for template in templates
let tempurl = NSURL(fileURLWithPath: template)
let title = tempurl.URLByDeletingPathExtension?.lastPathComponent
let ubiquitousDestinationURL = self.ubiquityURL?.URLByAppendingPathComponent(title!).URLByAppendingPathExtension(AppDelegate.myExtension)
// let exists = NSFileManager().isUbiquitousItemAtURL(ubiquitousDestinationURL!)
do
try NSFileManager.defaultManager().setUbiquitous(true, itemAtURL: tempurl, destinationURL: ubiquitousDestinationURL!)
catch let error as NSError
print("Failed to move file \(title!) to iCloud: \(error)")
return
在运行此之前,我从设备中删除了该应用程序,并确保 iCloud 中没有该名称的文档。首次启动时,没有 iCloud,示例文档会正确复制到本地 Documents 文件夹中。使用 iCloud,此代码会运行,setUbiquitous
调用会导致错误,指出文件已存在。对isUbiquitousItemAtURL
的注释调用也返回true。
是什么让这些调用注册了一个我很确定不存在的文件?谢谢!
【问题讨论】:
【参考方案1】:文件已经存在,直接替换
【讨论】:
没有其他证据表明它们存在。显示云文件的元查询没有找到它们,但会找到所有其他文档。无法通过 Mac 的文件系统(iCloud 文件夹)找到它们。无法使用 iMazing 找到它们。我确实知道它正在寻找导致它产生该错误的东西,但我无法弄清楚是什么或在哪里。【参考方案2】:主要解决方案...在所有的试验和错误中,我忘记将“文档”放回 url。应该是:
let ubiquitousDestinationURL = self.ubiquityURL?.URLByAppendingPathComponent("Documents").URLByAppendingPathComponent(title!).URLByAppendingPathExtension(AppDelegate.myExtension)
否则,将文件写入错误的目录,因此我无法正常查看。
【讨论】:
以上是关于SetUbiquitous 为不存在的文件显示“文件已存在”的主要内容,如果未能解决你的问题,请参考以下文章
使用 setUbiquitous 为 UIDocument 文件关闭 iCloud 同步时出错(LibrarianErrorDomain 错误 2)
为不存在的文件解析相对路径(如 realpath)的最佳方法是啥?
我应该为不存在的文件参数引发 ValueError 或 OSError 吗?
求大神帮忙。win10网络重置后以太网和wlan状态都显示为不存在,右下角小