2012-07-07 45 views
0

我试图更改对象属性的值(从.plist取消存档),并且它似乎不工作......我试图出了什么错了一段时间了,我真的很感激任何帮助。对象属性的更改值不适用于使用NSKeyedUnarchiver创建的对象

验证码:

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条件涉及,但我不知道条件是什么以及如何创建一个新文件...)。

回答

0

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

Objective-C允许发送消息到零,所以这样的东西很难看到。尝试使用NSLogging OwnProfile并查看!

+0

干杯帮了我很多......真的很难调试那种有工作人员。 – byteSlayer 2012-07-07 19:11:49

+0

嗨,我已经尝试编写代码来检查文件是否存在,看起来像这样:BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:pathToSave];现在事情是,它永远是真的!它返回true,然后继续从存档中创建对象,但之后它会像以前一样返回null,即使根据文件管理器存在一个文件。于是我继续检查了我的项目的“文档”文件夹,并惊喜地发现,没有任何文件。那么你有什么建议吗?如果不是,是否可以自己创建一个文件并让它始终在那里? – byteSlayer 2012-07-07 19:27:09

+0

您是否检查过pathToSave变量,并对其进行了完整性检查?最后一次,我发现自己的大脑存在着关于文件的问题,我正在查看错误的模拟器的文档文件夹(即,文件存在于我的5.0中,但不是我的5.1,应用程序在5.0上运行,我在5.1中查找)... ...用于创建您自己的文件;你绝对可以这样做:-)但这可能是另一个SO问题;-) – 2012-07-07 19:36:33

相关问题