アーカイブとアーカイブ解除の何が問題なのかわかりません。クラスからデータを保存しようとしています。エンコーダーとデコーダーは次のとおりです。
//archiving
- (void)encodeWithCoder:(NSCoder *)aCoder
{
//encode only certain instance variables
[aCoder encodeObject:self.name forKey:@"name"];
[aCoder encodeObject:self.location forKey:@"location"];
}
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [self init];
if (self) {
//decode data
[self setName:[aDecoder decodeObjectForKey:@"name"]];
[self setLocation:[aDecoder decodeObjectForKey:@"location"]];
}
return self;
}
インスタンス変数はプロパティであり、カスタム クラスの値です。このクラスの複数のインスタンスが、メイン ビュー コントローラーに格納されている NSMutableArray にデータを入力します。
私のView Controllerにはメソッドが含まれています:
- (NSString *)itemArchivePath
{
NSArray *documentDirectories = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
//only one document in list - get path t o it
NSString *documentDirectory = [documentDirectories objectAtIndex:0];
return [documentDirectory stringByAppendingString:@"file.archive"];
}
- (BOOL)saveChanges
{
//returns success or failure
NSString *path = [self itemArchivePath];
return [NSKeyedArchiver archiveRootObject:customClassArray //This is the array storing multiple instances of the custom class
toFile:path];
}
配列に関するコメントは実際のコードにはありません。最後に、アプリ デリゲートには次のコードがあります。
- (void)applicationDidEnterBackground:(UIApplication *)application
{
BOOL success = [mainViewController saveChanges];
if (success) {
NSLog(@"Saved Successfully!");
}
else {
NSLog(@"Unsuccessful");
}
}
残念ながら、コードを実行するたびに「失敗」が常にログに記録され、その理由はわかりません。mainViewController は、アプリ デリゲートのインスタンス変数です。非常に長い間デバッグを試みましたが、問題が見つかりません。どんな助けでも大歓迎です。ありがとう!