1

我正在尝试将具有复杂结构的 NSDictionary 写入 plist 以在 iPhone 应用程序中使用。但是,该文件似乎根本没有写入,我不知道为什么。

结构应该是这样的:

Level             Dict
  Roads           Array
    Road1         Array
      Vertex1     Dict
        x         Number
        y         Number
      Vertex2     Dict
        ...

这就是我的代码的样子:

NSMutableDictionary *levels = [[NSMutableDictionary alloc] init];
NSMutableArray *roads = [[NSMutableArray alloc] init];
for(ChainLinkRoad *r in data.roads){
    NSMutableArray *road = [[NSMutableArray alloc] init];
    for(ChainPoint *p in r.v){
        NSNumber *x = [NSNumber numberWithFloat: p.x];
        NSNumber *y = [NSNumber numberWithFloat: p.y];
        NSMutableDictionary *vertex = [[NSMutableDictionary alloc] init];
        [vertex setObject:x forKey:@"x"];
        [vertex setObject:y forKey:@"y"];
        [road addObject:vertex];
    }
    [roads addObject:road];
}
[levels setObject:roads forKey:@"Roads"];
bool b = [levels writeToFile:@"test.plist" atomically:YES];
//returns true

我尝试将可变对象转换为不可变对象,但没有奏效。我能够从最终的 NSDictionary(级别)访问数据就好了。

编辑:我应该补充一点,这个 plist 不是在 iphone 游戏中实际使用的。在设计关卡时供个人使用。该代码不会在最终版本中存在。

4

2 回答 2

1

一个常见的问题是,字典对字符串转换无效,如无效的 UTF-8 字符。在控制台上输出以检查它。

如果这对您没有帮助,请仅保存一些元素以查看发生了什么。

于 2016-01-12T10:46:26.793 回答
-1

我昨天刚刚发布了同样问题的答案。与其尝试保存类的单个数据元素,不如使用 NSKeyArchiver 和 NSCoding 保存整个对象。单击链接以获取完整说明。

如何将类对象数组保存到 Plist(Iphone 开发)

于 2012-07-20T19:00:24.923 回答