plist 输出值的问题

Posted

技术标签:

【中文标题】plist 输出值的问题【英文标题】:problems with the plist output values 【发布时间】:2011-08-24 04:45:46 【问题描述】:

这是我第一次使用 plist 作为为我的应用程序存储少量数据的方式。我现在的问题是我的应用程序给出了EXC_BAD_ACCESS 错误。在我阅读 plist 的方法中,它给了我summary unavailable。但是 NSMutableDictionary 给了我 2 个密钥/配对,我的 plist 只有 2 个值,只是为了学习如何使用 plist(现在)。我有一种感觉,由于这个 Summary Unavailable, I got theEXC_BAD_ACCESS` 错误?

-(void)readFile
    NSError *error;
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); //1
    NSString *documentsDirectory = [paths objectAtIndex:0]; //2
    NSString *path = [documentsDirectory stringByAppendingPathComponent:@"EventAddress.plist"]; //3

    NSFileManager *fileManager = [NSFileManager defaultManager];

    if (![fileManager fileExistsAtPath: path]) //4
    
        NSString *bundle = [[NSBundle mainBundle] pathForResource:@"EventAddress" ofType:@"plist"]; // 5

        [fileManager copyItemAtPath:bundle toPath: path error:&error]; //6
    

    NSMutableDictionary *savedStock = [[NSMutableDictionary alloc] initWithContentsOfFile: path];

    //load from savedStock both addr and event are NSString
    addr = [savedStock objectForKey:@"Address"];
    event = [savedStock objectForKey:@"Event"];

    [savedStock release];

任何帮助将不胜感激。

更新 1

Where the error occurred was at the - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    ...
    ...
    // EXC_BAD_ACCESS happened at this line
    [[cell textLabel] setText:addr];

但是当@Jeff 告诉我保留地址和事件时,问题就解决了。现在我的新 EXC_BAD_ACCESS 来自 main.m 文件: int retVal = UIApplicationMain(argc, argv, nil, nil);

现在可能出了什么问题?

更新 2 这是我学习如何使用 plist 的网站。 plist tutorial

【问题讨论】:

哪一行得到了 EXC_BAD_ACCESS? 对不起,没有正确写出问题。 addr 和 event 都假设显示在UITableViewCell [[cell textLabel] setText:addr]; 我会尝试@Jeff 的回复,然后更新这个问题。感谢您的快速回复! 【参考方案1】:

在此之后您是否使用addrevent 的值?它们没有被保留,所以当savedStock 被释放时,它们也会被释放。如果这些是实例变量,请在将它们从字典中拉出时保留它们。

【讨论】:

以上是关于plist 输出值的问题的主要内容,如果未能解决你的问题,请参考以下文章

在不提供新版本的情况下更改 info.plist 值的方法

writeToFile 输出 .plist 没有写入正确的值

将 NSMutableDictionary 保存到 plist 问题中

搜索核心数据与 Plist

从 plist/dictionary 转换为 NSNumber 时出错

从 plist 加载的 iOS 静态 const 数组