【问题标题】:How to save JSON data to iPhone如何将 JSON 数据保存到 iPhone
【发布时间】:2016-02-02 02:02:14
【问题描述】:

我有一个 json 数据来显示一些信息。但我应该生成“一个文件”来将这些信息保存到我的 iPhone。想法?

- (void)showInfos {
NSMutableDictionary *infoDictionary = [[NSMutableDictionary alloc]init];
[infoDictionary setObject:self.totalDuration.text forKey:@"totalFrames"];

NSMutableArray *nodesArray = [[NSMutableArray alloc]init];
[nodesArray addObject:@{@"x":@(_zeroButton.frame.origin.x),@"y":@(_zeroButton.frame.origin.y),@"frame":self.zeroBtnLbl.text}];
[nodesArray addObject:@{@"x":@(_firstButton.frame.origin.x),@"y":@(_firstButton.frame.origin.y),@"frame":self.firstBtnLbl.text}];
[nodesArray addObject:@{@"x":@(_secondButton.frame.origin.x),@"y":@(_secondButton.frame.origin.y),@"frame":self.secondBtnLbl.text}];
[nodesArray addObject:@{@"x":@(_thirdButton.frame.origin.x),@"y":@(_thirdButton.frame.origin.y),@"frame":self.thirdBtnLbl.text}];
[nodesArray addObject:@{@"x":@(_fourthButton.frame.origin.x),@"y":@(_fourthButton.frame.origin.y),@"frame":self.fourthBtnLbl.text}];
[infoDictionary setObject:nodesArray forKey:@"nodes"];

NSLog(@"dicArray:%@",infoDictionary);
NSData *data = [NSJSONSerialization dataWithJSONObject:infoDictionary options:kNilOptions error:nil];
NSArray *retDicArray = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
NSLog(@"retDicArray:%@",retDicArray);
}

【问题讨论】:

    标签: ios json sqlite nsdictionary nsdata


    【解决方案1】:

    您可以使用NSDatawriteToFile:atomically: 方法将该数据写入文件。

    NSData *data       = [NSJSONSerialization dataWithJSONObject:infoDictionary options:kNilOptions error:nil];
    NSString *docDir   = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
    NSString *filePath = [docDir stringByAppendingPathComponent:@"MyJSONFile.json"];
    [data writeToFile:filePath atomically:YES];
    

    【讨论】:

    • 感谢您的回答。但是我在哪里可以在我的手机中看到该文件...找不到它。? @midhunMP
    • @deniz 如果您使用的是 iPhone 模拟器,它将在您的应用程序目录中。如果您使用的是调试/开发版本,请使用 Xcode 的管理器下载容器并在文件夹中检查它。在生产/应用商店构建中,除了读回内容外,没有直接的方法可以检查。但是,您可以在您的应用中启用 iTunes 文件共享(但您必须有 App Store 批准的正当理由)
    • 但是如果有人想阅读结果,他将如何得到它...这是主要问题..例如Windows用户..@midhunMP
    • @deniz:不像android或其他平台,你不能暴露iOS的应用数据目录(除非你root它)。您应该在应用中实现自定义目录浏览器以显示应用中的 json 文件并以编程方式读回数据或通过网络服务发送这些文件。
    • @deniz:如果您将文件写入 Documents 目录并拥有file sharing enabled,则可以通过 iTunes(也在 Windows 上)访问这些文件。
    【解决方案2】:

    您真的需要将其保存到文件中,还是只想将信息序列化到应用程序中?

    我个人经常使用NSUserDefaults在应用内保存简单的用户信息。

    例如,如果你想存储一个整数:

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setInteger:newDistance forKey:@"myInteger"];
    [defaults synchronize];
    

    然后当你想检索它时,只需这样做:

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    int myInteger = (int)[defaults integerForKey:@"myInteger"];
    

    你也可以存储 NSArray,所以它应该适合你。

    如果您有更复杂的序列化结构,您可以使用 Core Data,但它要复杂得多。

    【讨论】:

    • 是的@pralthom ..我必须将信息保存到文件中以相互比较信息..你有替代解决方案吗?
    猜你喜欢
    • 1970-01-01
    • 2012-04-05
    • 2012-12-25
    • 2019-03-30
    • 2020-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多