gpt4 book ai didi

ios - 从文件中读取 JSON 数据 Swift 2.0 适用于模拟器但不适用于设备,返回 json null

转载 作者:行者123 更新时间:2023-11-29 01:37:35 26 4
gpt4 key购买 nike

您好,我正在尝试从我的应用程序中的文件写入和读取一些数据 JSON 格式。我知道设备上的文件名是按键敏感的,我检查了两次。我的问题是理解为什么它在模拟器上运行良好并在设备上返回 null JSON 数据。非常感谢!

func writeJsonData() {

let file = "/settings.json"
if let dir : NSString = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.AllDomainsMask, true).first {
let path = dir.stringByAppendingPathComponent(file);
let json = ["val1":1, "val2":2]
self.jsonToNSData(json)
if let file = NSFileHandle(forWritingAtPath:path) {
file.writeData(jsonToNSData(json)!)
}
}

self.readJsonData()
}

func readJsonData () {

let file = "/settings.json"
if let dir : NSString = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.AllDomainsMask, true).first {
let path = dir.stringByAppendingPathComponent(file);
if let data = NSData(contentsOfFile: path as String) {
let json = JSON(data: data)
print(json) // !!!!!!!!!!!
if json != JSON.null {

let val1 = json["val1"].int!
let val2 = json["val2"].int!
}
}
}
}

问题出在写入数据上,正确的方法是:

func writeJsonData() {
let file = "file.json"
if let dir : NSString = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.AllDomainsMask, true).first {
let path = dir.stringByAppendingPathComponent(file);
let json: JSON = ["val1":val1 as Int, "val2":val2 as Int]
let str = json.description
let data = str.dataUsingEncoding(NSUTF8StringEncoding)!
if let file = NSFileHandle(forWritingAtPath:path) {
file.writeData(data)
}
}
}

最佳答案

let file = "/settings.json" 无法在设备上运行。

您需要查看 NSBundle(我会在一两分钟内更新这篇文章,当我可以为您提供一些示例代码时)

目前我只有 objective c 代码——但它应该是一样的:

NSBundle* myBundle = [NSBundle bundleWithIdentifier:@"org.mitre.EGM96GeoidCalculator"];
NSString *path2 = [myBundle pathForResource:@"EGM96" ofType:@""];

你需要在 swift 中做的 - 等等是相似的(见这篇文章:Reading in a JSON File Using Swift)

if let path = NSBundle.mainBundle().pathForResource("test", ofType: "json")
{
if let jsonData = NSData(contentsOfFile: path, options: .DataReadingMappedIfSafe, error: nil)
{
if let jsonResult: NSDictionary = NSJSONSerialization.JSONObjectWithData(jsonData, options: NSJSONReadingOptions.MutableContainers, error: nil) as? NSDictionary
{
if let persons : NSArray = jsonResult["person"] as? NSArray
{
// Do stuff
}
}
}
}

现在,如果您正在框架中做某事 - 或者您不想访问 mainBundle 而是访问带有框架标识符的包。

关于ios - 从文件中读取 JSON 数据 Swift 2.0 适用于模拟器但不适用于设备,返回 json null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32806734/

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