NSSearchPathForDirectoriesInDomains的应用程序ID每个Simulator Run&在Real Device上更新App

时间:2016-01-22 12:51:29

标签: ios iphone xcode swift

我希望将图片保存到iPhone的用户域,以便编写以下代码。

DataGrid

它显示为:SortKeepingDataGrid

在这种情况下,应用程序ID为let path = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0] print(path)

问题是当我再次在模拟器上运行而没有移除APP时,它显示为:/Users/xxx/Library/Developer/CoreSimulator/Devices/1312F880-6BDC-45D2-B3B3-4D2374313C67/data/Containers/Data/Application/A2850237-5E71-4373-81A6-B443032E1951/Documents/

在这种情况下,应用程序ID为A2850237-5E71-4373-81A6-B443032E1951

因此,虽然我刚刚更新了应用并且没有删除该应用,但是之前和当前安装之间存在应用ID差异。为什么会引起它以及如何解决它?

它导致Xcode 7.2,7.1,7.0。它不仅会导致模拟器安装,还会导致实际的设备安装。因此,如果iOS用户从应用商店更新应用,则应用程序ID将被更改,应用程序沙箱也将被更改,最终用户无法引用他们的图像。

类似情况:

相关指南:

提前致谢。

修改

似乎我必须坚持路径作为亲戚而非绝对。

我会尝试这种方法,如果我解决了问题,我会更新问题。

3 个答案:

答案 0 :(得分:2)

我必须坚持路径相对而非绝对。我还可以通过NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0] + "persisted relative path"获取来抢救旧的运行图像。

答案 1 :(得分:1)

更好的解决方案是保存书签数据 https://developer.apple.com/library/ios/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/AccessingFilesandDirectories/AccessingFilesandDirectories.html

  

书签是一个不透明的数据结构,包含在NSData对象中,   描述文件的位置。而路径和文件   在您的应用启动之间,参考网址可能很脆弱   书签通常可用于重新创建文件的URL,即使在   移动或重命名文件的情况

首先,您必须使用NSURL而不是String

将NSURL转换为NSData

let data: NSData? = try? url.bookmarkDataWithOptions(.SuitableForBookmarkFile, includingResourceValuesForKeys: nil, relativeToURL: nil)

从书签NSData

中读取NSURL
    var isStale: ObjCBool = false
    let url = try? NSURL(
        byResolvingBookmarkData: bookData,
        options: [],
        relativeToURL: nil,
        bookmarkDataIsStale: &isStale)
    guard let fullURL = url else {
        return nil
    }

您可以将relativeToURL填入您的文档目录网址

或者,您可以使用FileKitpath.bookmarkDataPath(bookmarkData: ..)

答案 2 :(得分:-1)

尝试使用name.extension

来保留您的文件

保存文件

    let pathDocument = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0]
let fullPath =  let fullPath = pathDocument+"/"+"fileName.ext"
 //...add some code to save document at `fullPath`...

获取文件

    let pathDocument = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0]
let fullPath =  let fullPath = pathDocument+"/"+"fileName.ext"
//... add code to get data at path : `fullPath`....