【问题标题】:Write/Read plist file iPhone写/读 plist 文件 iPhone
【发布时间】:2010-10-17 16:01:06
【问题描述】:

我的 iphone 应用程序中有 plist,我想从我的单向读取和写入一个整数并形成它。

我有这个要读:

 scoreData *score = [scoreData sharedData];

 filePath = @"stats.plist";
 NSMutableDictionary* plistDict = [[NSMutableDictionary alloc] initWithContentsOfFile:filePath];

 score.highScore = [plistDict objectForKey:@"score"];

然后写给它:

scoreData *score = [scoreData sharedData];

 NSMutableDictionary* plistDict = [[NSMutableDictionary alloc] initWithContentsOfFile:filePath];

 [plistDict setValue:score.highScore forKey:@"score"];
 [plistDict writeToFile:filePath atomically: YES];

我在这两个部分都遇到了错误:

objc_object* 到 int 的无效转换

和

int 到 objc_object 的转换格式无效

感谢任何帮助,谢谢。

【问题讨论】:

    标签: iphone objective-c plist


    【解决方案1】:

    两件事:

    1. 当您在字典中设置键时,you're probably after setObject:forKey: 而不是 setValue:forKey:。

    2. 字典包含对象(类型 id 或 NSString* 或您自己的 Obj-C 对象),而不是原始类型(int、BOOL 等)。

    当您想在 Obj-C 集合中存储原始类型时,可以将其“包装”在一个对象中,如下所示:

    [plistDict setObject:[NSNumber numberWithInt:score.highScore] forKey:@"score"];
    

    然后像这样拿回来:

    score.highScore = [[pListDict objectForKey:@"score"] intValue];
    

    【讨论】:

    • 构建没有错误 nw 这太棒了!但是我更改了 score.highScore,然后完全退出应用程序,重新启动并将其归零,它永远不会恢复价值。感谢您的帮助,谢谢。
    • 有趣的发现。我认为我正在使用它写入 plist 并读取它的代码,但实际上并没有保存它以备下次使用该应用程序时使用。可能的?我该如何解决这个问题?
    • 可能它不起作用,因为您正在尝试将字典写入 App 包中的 .plist 文件,该文件是只读的。您应该检查“[plistDict writeToFile:filePath atomically: YES];”的返回值(是=成功,否=写入失败)。尝试将文件写入 App Bundle 文档文件夹中的路径,该路径是可读写的。您可以使用以下方法获取文档的路径: NSArray *arrayPaths = NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES); NSString *docDir = [arrayPaths objectAtIndex:0];
    【解决方案2】:

    看看这是否回答了你的问题:

    How to create a new custom property list in iPhone Applications

    您可以使用 NSUserDefaults 但当然 highScore 并不是真正的默认值。

    【讨论】:

      猜你喜欢
      • 2012-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-05
      • 1970-01-01
      相关资源
      最近更新 更多