2012-04-27 10 views
-2

NSCodingを動作させることができません。いくつかのデータをnsuserdefaultsに保存してから、それを元に戻そうとしています。私は保存しているカスタムクラスを取得しますが、その中の変数は取得しません。NSCodingが機能しない

の.h

#import <UIKit/UIKit.h> 

@interface Match : NSObject <NSCoding> 
{ 
    NSString *player1Name; 
} 

@property (nonatomic, strong) NSString *player1Name; 


@end 

.M

#import "Match.h" 

@interface Match() 

@end 

@implementation Match 

@synthesize player1Name; 

#define player1NameKey @"player1NameKey" 




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

    if ((self = [super init])) 
    { 
     self.player1Name = [decoder decodeObjectForKey: @"asd"]; 
    } 

    return self; 
} 

- (void)encodeWithCoder:(NSCoder *)encoder 
{ 
    [encoder encodeObject:self.player1Name forKey:@"asd"]; 
} 

@end 

と機能:

Match *match = [[Match alloc] init]; 
match.player2Name = @"hi"; 


NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
NSMutableArray *tempArray = [[NSMutableArray alloc] initWithArray:[NSKeyedUnarchiver unarchiveObjectWithData: [defaults objectForKey: @"matches"]]]; 

[tempArray addObject:match]; 

NSData* arrayData = [NSKeyedArchiver archivedDataWithRootObject: tempArray]; 
[defaults setObject: arrayData forKey: @"matches"]; 


//Check if it succeded 

NSMutableArray *tempArray2 = [[NSMutableArray alloc] initWithArray:[NSKeyedUnarchiver unarchiveObjectWithData: [defaults objectForKey: @"matches"]]]; 
Match *match2 = (Match *)[tempArray2 objectAtIndex:0]; 

NSLog(@"match2: %@", match2.player2Name); 

私が "一致" オブジェクトが、変数 "を得るかここでは、コードですplayer2Name "はnilです。

助けてください! ありがとうございます

+0

あなたのマッチクラスは単にインスタンス変数とプロパティ 'player1Name'を表示しますが、あなたのメイン関数では、最初の代入はプロパティ' player2Name'です。決して使用されない 'player1NameKey'を定義します。その他サンプルコードをソートする必要があります。プロセスでエラーが見つかる可能性もありますが、そうでない場合は、他の人が手軽に手助けすることができます。 – CRD

答えて

2

もちろん、もちろんです。あなたは実際にそれをいつでもエンコードすることはありません。

+0

ああ、どうすればいいですか?返信ありがとう – BlackMouse

+0

@ user1251004:あなたは 'player1Name'をエンコードしています。 'player2Name'にはアクセスしませんが、後で' player2Name'にアクセスしようとします。プリントアウトコードを変更して 'player1Name'を表示してみてください。 –

関連する問題