在设备中查找路径时出错
Posted
技术标签:
【中文标题】在设备中查找路径时出错【英文标题】:Error in finding path in the device 【发布时间】:2016-02-03 13:17:55 【问题描述】:我只是将 Data.csv 文件拖到导航器面板中的应用程序文件夹中,我正在尝试将文件的正确路径设置到应用程序中。 下面的代码我用于模拟器并且运行良好,但是为了在设备中运行,我更改为第二个代码块,然后我得到了这个错误: 数据[399:157757] CFURLCopyResourcePropertyForKey 失败,因为它传递了一个没有方案的 URL 错误域 = NSCocoaErrorDomain 代码 = 256 “文件“文档”无法打开。” UserInfo=NSURL=/var/mobile/Containers/Data/Application/C7756542-6922-4C6F-A98E-C6F407B2063E/Documents
//code to show the path in the simulator:
guard let remoteURL = NSURL(string: "/Users/mbp/Library/Developer/CoreSimulator/Devices/7F25FC7C-F2B2-464E-85B4-A2B96DB83F17/data/Containers/Bundle/Application/F285940D-7776-4EE2-83A1-D54DD3411E0E/Data.app/Data.csv") else
return
阻止在设备中运行应用程序:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool
let sourcePath = NSBundle.mainBundle().pathForResource(“Data”, ofType: "csv")
print(sourcePath)
let filename = "Data.csv"
let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0]
let destinationPath = documentsPath + "/" + filename
do
try NSFileManager().copyItemAtPath(sourcePath!, toPath: destinationPath)
catch _
Try to load the file
let fetchRequest: NSFetchRequest = NSFetchRequest(entityName: "DataEntity")
fetchRequest.fetchLimit = 1
do
let result = try managedObjectContext.executeFetchRequest(fetchRequest)
if result.count == 0
preloadData()
catch let error as NSError
print("Error: \(error.domain)")
func preloadData ()
guard let remoteURL = NSURL(string:NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0]) else
return
【问题讨论】:
@LeoDabus 好的,我应该写什么?我不知道设备中文件的路径。我怎么才能得到它?感谢您的回复:) 查看此帖***.com/a/34548888/2303865 您在模拟器上的路径与您的设备上的路径不同。您正在硬编码您的路径。您应该使用 URLByAppendingPathComponent 来撰写您的网址 并检查此***.com/a/27693945/2303865 @Manolo 您也可以直接添加方案 ex。 guard let remoteURL = NSURL(string: "file:///Users/mbp/Library/Developer/CoreSimulator/Devices/7F25FC7C-F2B2-464E-85B4-A2B96DB83F17/data/Containers/Bundle/Application/F285940D-7776-4EE2- 83A1-D54DD3411E0E/Data.app/Data.csv") else return ;不过,我也更喜欢 URLByAppendingPathComponent 的方式。 【参考方案1】:通过NSURL处理文件路径可以避免设备和模拟器不匹配。
let srcURL = NSBundle.mainBundle().URLForResource("Data", withExtension: "csv")!
let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0]
var toURL = NSURL(string: "file://\(documentsPath)")!
toURL = toURL.URLByAppendingPathComponent(srcURL.lastPathComponent!)
do
try NSFileManager().copyItemAtURL(srcURL, toURL: toURL)
self.preloadData(toURL)
catch let error as NSError
print(error.localizedDescription)
func preloadData(toURL: NSURL)
print("=== Success and print toURL ===")
print(toURL)
【讨论】:
得到这个错误:2016-02-03 19:34:00.397 data[39577:782986] CFURLCopyResourcePropertyForKey 失败,因为它传递了一个没有方案的 URL 文件无法打开,因为指定不支持 URL 类型。 @Manolo 哎呀,刚刚用一个新创建的项目进行了验证,请查看我修改后的答案。 我认为最后一个func preloadData应该有文件的路径我错了吗? @Manolo 是的,我想是的~ 那么我应该在那里设置什么拍子? :(以上是关于在设备中查找路径时出错的主要内容,如果未能解决你的问题,请参考以下文章