在设备中查找路径时出错

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 是的,我想是的~ 那么我应该在那里设置什么拍子? :(

以上是关于在设备中查找路径时出错的主要内容,如果未能解决你的问题,请参考以下文章

在嵌套列表中查找最小值时出错

在 pymongo Mongodb 中查找值时出错

忽略查找中的目录路径(在shell中)[重复]

在 VLOOKUP 中使用间接函数查找 MAX ABS 时出错

C程序查找最大和最小元素时出错

从相机中查找帧差异时出错