XIBファイルからアーカイブされたオブジェクトを初期化することについて読んでいて、それを見つけました
- (id)initWithCoder:(NSCoder *)aDecoder
する方法です。しかし、私はこれを回避することができません。誰かがこれを行う方法の簡単な例を教えてもらえますか?
ありがとうございます
XIBファイルからアーカイブされたオブジェクトを初期化することについて読んでいて、それを見つけました
- (id)initWithCoder:(NSCoder *)aDecoder
する方法です。しかし、私はこれを回避することができません。誰かがこれを行う方法の簡単な例を教えてもらえますか?
ありがとうございます
次の方法で使用できます。
.h ファイル
@interface Score : NSObject {
NSString *Username;
NSString *TotalPoints;
NSString *LifeRemains;
NSString *ScoreDate;
}
@property (nonatomic, retain) NSString *Username;
@property (nonatomic, retain) NSString *TotalPoints;
@property (nonatomic, retain) NSString *LifeRemains;
@property (nonatomic, retain) NSString *ScoreDate;
.m ファイルで
@synthesize Username, TotalPoints, LifeRemains, ScoreDate;
- (void)encodeWithCoder:(NSCoder *)encoder
{
//Encode properties, other class variables, etc
[encoder encodeObject:self.Username forKey:kScoreUsername];
[encoder encodeObject:self.TotalPoints forKey:kScoreTotalPoints];
[encoder encodeObject:self.LifeRemains forKey:kScoreLifeRemains];
[encoder encodeObject:self.ScoreDate forKey:kScoreDate];
}
- (id)initWithCoder:(NSCoder *)decoder
{
self = [super init];
if( self != nil )
{
//decode properties, other class vars
self.Username = [decoder decodeObjectForKey:kScoreUsername];
self.TotalPoints = [decoder decodeObjectForKey:kScoreTotalPoints];
self.LifeRemains = [decoder decodeObjectForKey:kScoreLifeRemains];
self.ScoreDate = [decoder decodeObjectForKey:kScoreDate];
}
return self;
}
ハッピーコーディング...
このNSCoder
クラスは、のarchive/unarchive
(マーシャリング/アンマーシャリング、シリアライズ/デシリアライズ) に使用されobjects
ます。
これは、ストリーム (ファイル、ソケットなど) にオブジェクトを書き込み、後でまたは別の場所でそれらを取得できるようにする方法です。
アーカイブを読むことをお勧めします
また、次のメソッドを次のように定義する必要があります。
- (void)encodeWithCoder:(NSCoder *)enCoder
{
[super encodeWithCoder:enCoder];
[enCoder encodeObject:instanceVariable forKey:INSTANCEVARIABLE_KEY];
// Similarly for the other instance variables.
....
}
initWithCoder メソッドでは、次のように初期化します。
- (id)initWithCoder:(NSCoder *)aDecoder
{
if(self = [super initWithCoder:aDecoder]) {
self.instanceVariable = [aDecoder decodeObjectForKey:INSTANCEVARIABLE_KEY];
// similarly for other instance variables
....
}
return self;
}
オブジェクト標準の方法を初期化できます。
CustomObject *customObject = [[CustomObject alloc] init];
この回答からの例