0

オブジェクトのプロパティ(.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がファイルがない場合にファイルを作成すると記載されているため、アプリは「気にしない」と想定しました。存在します。問題は次のとおりです。ファイルがない場合、オブジェクトを作成するためのコード(NSKeyedUnarchiver)は、値o'NULL'を返すため、機能オブジェクトを作成しますが、変更することはできません...ファイルは存在する必要があります。ファイルが存在するかどうかを確認し、存在しない場合は作成するためのコードは何ですか?(If-Else条件が含まれると思いますが、条件が何であるか、新しいファイルを作成する方法がわかりません...)。

4

1 に答える 1

0

問題は、ファイルが存在しない場合、OwnProfileDataの実際のインスタンスを取得していない可能性があるため、OwnProfileがnilであることです。nilを確認し、その場合は新しいインスタンスを作成します(将来使用するためにアーカイブに追加できます)。

Objective-Cではメッセージをnilに送信できるため、このようなものは見づらいです。NSLogging OwnProfileを試してみてください!

于 2012-07-07T18:05:10.753 に答える