1

アーカイブとアーカイブ解除の何が問題なのかわかりません。クラスからデータを保存しようとしています。エンコーダーとデコーダーは次のとおりです。

//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 は、アプリ デリゲートのインスタンス変数です。非常に長い間デバッグを試みましたが、問題が見つかりません。どんな助けでも大歓迎です。ありがとう!

4

1 に答える 1

0

path保存しようとしている が有効でない可能性があります。ログを記録して、保存が失敗したときに値が正常かどうかを確認する必要があります。stringByAppendingPathComponent:の代わりにusing を参照することもできますstringByAppendingString:

于 2014-05-28T19:40:08.473 に答える