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