从File中读取NSMutableArray

时间:2012-10-13 10:15:37

标签: objective-c cocoa nsmutablearray

我正在尝试从文件中读取2个NSMutableArrays。我正在保存并加载:

SAVE:

NSMutableDictionary *saveDict = [NSMutableDictionary dictionary];
[saveDict setValue:name forKey:@"name"];
[saveDict setValue:last_episodue forKey:@"whereat"];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingString:@"/ShopFile.sav"];
[saveDict writeToFile:filePath atomically:YES];

LOAD:

        name = [[NSMutableArray alloc]init];
    last_episodue = [[NSMutableArray alloc]init];

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *filePath = [documentsDirectory stringByAppendingString:@"/ShopFile.sav"];
    NSDictionary *loadDict = [NSDictionary dictionaryWithContentsOfFile:filePath];
    name =            [loadDict valueForKey:@"name"];
    last_episodue=     [loadDict valueForKey:@"whereat"];

变量name和last_episodue已在头文件中声明。

程序编译并运行,但是在运行时尝试加载文件时,代码的LOAD部分执行,当它完成时,程序停止工作。这是调试信息(第一部分):

2012-10-13 12:14:10.801 series[5223:303] -[NSISRestrictedToZeroMarkerVariable copyWithZone:]: unrecognized selector sent to instance 0x1001900c0
2012-10-13 12:14:10.803 series[5223:303] -[NSISRestrictedToZeroMarkerVariable copyWithZone:]: unrecognized selector sent to instance 0x1001900c0
2012-10-13 12:14:10.906 series[5223:303] (

知道问题可能是什么?谢谢!

编辑:这是保存所在文件的内容:

 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>name</key>
    <array>
        <string>a</string>
    </array>
    <key>whereat</key>
    <array>
        <string>a</string>
    </array>
</dict>
</plist>

1 个答案:

答案 0 :(得分:4)

这是一个黑暗中的镜头,因为我无法在没有更多上下文的情况下告诉你的内存管理是什么样的,但我只是因为一个变量而导致这个问题没有被正确保留(我们分配了它)使用objc_setAssociatedObject但传递OBJC_ASSOCIATION_ASSIGN作为objc_AssociationPolicy)。我持有的指针始终指向NSISRestrictedToZeroMarkerVariable的实例。

由于NSISRestrictedToZeroMarkerVariable不是公开暴露的类,因此您所看到的很可能是内存覆盖的结果。在Xcode中设置一个异常断点并检查哪一行引发了这个错误,然后跟踪该变量的内存管理。