2012-02-02 10 views
1

archivedDataWithRootObjectメソッドを取得してencodeWithCoderを呼び出すことはできませんが、わかりやすく簡単ですが動作しません。NSKeyedArchiver archivedDataWithRootObject:encodeWithCoderを呼び出さない

#import <Foundation/Foundation.h> 

@interface Details : NSObject <NSCoding>{ 

NSMutableArray *myArray; 
} 

@property(nonatomic,retain) NSMutableArray *myArray; 

@end 

#import "Details.h" 

@implementation Details 
@synthesize myArray; 


-(id)init{ 
[super init]; 
return self; 
} 

-(id)initWithCoder:(NSCoder *)aDecoder{ 

NSLog(@"initWithCoder"); 
if (self = [super init]) 
{ 
    self.myArray = [[aDecoder decodeObjectForKey:@"details"]retain]; 

} 
return self; 
} 

- (NSMutableArray*)getDetails{ 

NSLog(@"getDetials"); 
// NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults]; 
NSData *details = [[NSUserDefaults standardUserDefaults] objectForKey:@"details"]; 
if (details != nil){ 
    NSArray *oldSavedArray = [NSKeyedUnarchiver unarchiveObjectWithData:details]; 
    if (oldSavedArray != nil) 
     self.myArray = [[NSMutableArray alloc] initWithArray:oldSavedArray]; 
    else 
     self.myArray = [[NSMutableArray alloc] initWithCapacity:1]; 
} 
return self.myArray; 
} 

- (void) addDetails:(NSMutableArray *)details{ 

     NSLog(@"add Details"); 

    [self.myArray addObject:details]; 
    [NSKeyedArchiver archivedDataWithRootObject:self.myArray]; 
    } 

- (void) encodeWithCoder:(NSCoder *)coder; 
{ 
    NSLog(@"encodeWithCoder"); 
    [coder encodeObject:self.myArray forKey:@"details"]; 
} 

@end 

のNSLog(@ "encodeWithCoder")は実行されません: は、ここでは、コードです。 何か不足している可能性があります。

答えて

1
[NSKeyedArchiver archivedDataWithRootObject:self.myArray]; 

あなたはmyArray変数をアーカイブするNSKeyedArchiverを言っている、いないオブジェクトあなただけで<NSCoding>を実装しました!

また、このメソッドはNSData *を返します。必要に応じてディスクに別途書き込む必要があります。

これを試してみてください:

NSData * archivedData = [NSKeyedArchiver archivedDataWithRootObject:self]; 
+0

はあなたにそんなにjackslashありがとう、私は今理解だと思います。少なくとも方法を呼んで、残りの部分を取り除いてください。驚くばかり。 Brett – BrettStuart

+3

[NSKeyedArchiver archiveRootObject:_rootObject toFile:_filePath]を使用すると、ファイルに直接アーカイブすることができます。 – Edwin

関連する問題