更改对象属性属性不适用于使用NSKeyedUnarchiver创建的对象

时间:2012-07-07 17:57:11

标签: objective-c ios object properties nskeyedarchiver

我正在尝试更改对象属性的值(从.plist中取消归档)并且它似乎不起作用...我试图弄清楚什么是错的,现在我会非常感谢任何帮助

守则:

NSArray * pathArray = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString * pathToSave = [[pathArray objectAtIndex:0] stringByAppendingPathComponent:@"ownProfileArchive"];
OwnProfileData * OwnProfile = [NSKeyedUnarchiver unarchiveObjectWithFile:pathToSave];
[OwnProfile setName:[NameField text]]; // at that point, even if I change the name to a string saying "Hello!", It would always be NULL! 
NSLog(@"Name = %@", [OwnProfile Name]); // Here I can see it is always null.
[NSKeyedArchiver archiveRootObject:OwnProfile toFile:pathToSave];

现在我第一次运行,可能在指定的路径上没有文件,我认为应用程序“不介意”,因为文档说NSKeyedArchiver会创建一个文件,如果有的话一个存在的。问题是:如果没有文件,Will用于创建对象的代码(NSKeyedUnarchiver)会创建一个功能对象,因为它确实返回一个值为'NULL',但我无法更改它...如果文件必须存在,检查文件是否存在的代码是什么,如果不存在则创建一个? (我认为会有一个If-Else Conditional,但我不知道条件是什么以及如何创建新文件......)。

1 个答案:

答案 0 :(得分:0)

我打赌问题是,如果文件不存在,那么我怀疑你没有得到OwnProfileData的实际实例,因此OwnProfile是零。检查nil,并在这种情况下创建一个新实例(可以将其添加到您的存档中以备将来使用)。

Objective-C允许发送消息为nil,所以很难看到这样的东西。试试NSLogging OwnProfile,看看!