gpt4 book ai didi

ios - 无法在 iOS 沙箱中的文档文件夹中创建文件或目录

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:33:26 25 4
gpt4 key购买 nike

我正在使用 Xcode(版本 8.2.1)iPad (v10.2.1) 上制作游戏,同时我试图在文档中保存一些数据在沙箱中的文件夹中,我发现我尝试的所有方法都失败了:createDirectorycreateFile(using file manager),以及 writeToUrl(using NSData) .我在 2 台 iPad 和 1 台 iPhone 上运行该程序,但没有成功。

我能够从我创建的 plist 中读取,并使用函数 convertDataFrom() 将其转换为字典。

我是数据持久化或文件操作的新手,我的游戏卡在了这里。将不胜感激任何帮助!

func loadData()->NSDictionary{
let fm = FileManager()

let sourceUrl = Bundle.main.url(forResource: "Data", withExtension: "plist")!
var appSupportDir = fm.urls(for: .documentDirectory, in: .userDomainMask).first! as? NSURL
appSupportDir = appSupportDir!.appendingPathComponent("UserData", isDirectory: true) as NSURL?
let urlForSave = (appSupportDir!.appendingPathComponent("Data.plist"))!


//load data, or if file doesn't exist yet, create one
var isDirectory: ObjCBool = false

if fm.fileExists(atPath: urlForSave.absoluteString, isDirectory: &isDirectory) {
let data = convertDataFrom(url: urlForSave)
print("data file exists")
print(isDirectory)

return data as NSDictionary

} else {
do { try fm.createDirectory(atPath: appSupportDir!.absoluteString!, withIntermediateDirectories: true, attributes: nil) }catch let Error {
print("create directory failed")
print(Error)
}

let originalData = NSData.init(contentsOf: sourceUrl)
print("\(urlForSave)")
do { try originalData?.write(toFile: urlForSave.absoluteString, options: .atomic) } catch let Error {
print(Error)
}
if (!fm.createFile(atPath: urlForSave.absoluteString, contents: originalData as Data?, attributes: nil)) {
fatalError("file creation failed")
}

let data = convertDataFrom(url: urlForSave)
print("\(data)")
print(isDirectory)

return data as NSDictionary
}

}

func convertDataFrom(url: URL)->Dictionary<String, Any> {
let dictionary = NSDictionary.init(contentsOf: url) as! Dictionary<String, Any>
return dictionary
}

Error messages for "createDirectory": Error Domain=NSCocoaErrorDomain Code=513 "You don’t have permission to save the file “UserData” in the folder “Documents”." UserInfo={NSFilePath=file:///var/mobile/Containers/Data/Application/F7F41E0D-D3F6-489B-A59E-B7AC401EC402/Documents/UserData/, NSUnderlyingError=0x174053f50 {Error Domain=NSPOSIXErrorDomain Code=1 "Operation not permitted"}} file:///var/mobile/Containers/Data/Application/F7F41E0D-D3F6-489B-A59E-B7AC401EC402/Documents/UserData/Data.plist

and for "createFile" (fatalError if createFile fails) Error Domain=NSCocoaErrorDomain Code=4 "The file “Data.plist” doesn’t exist." UserInfo={NSFilePath=file:///var/mobile/Containers/Data/Application/F7F41E0D-D3F6-489B-A59E-B7AC401EC402/Documents/UserData/Data.plist, NSUnderlyingError=0x174055bd0 {Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory"}} fatal error: file creation failed: file /Users/chanwu/Desktop/Math_DownStairs/Math_DownStairs/

最佳答案

您的代码会检查 urlForSave(最终文件)是否存在,如果不存在,您将尝试创建 UserData 目录。

如果最终文件不存在,但 UserData 目录存在,我希望得到您描述的确切结果。

您可能应该更改测试以查看 UserData 目录是否存在,而不是测试最终文件。这样,如果目录不存在,您将创建它,然后调用 write(toFile:),如果文件不存在,它将创建该文件。

关于ios - 无法在 iOS 沙箱中的文档文件夹中创建文件或目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43235358/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com