1

XIBファイルからアーカイブされたオブジェクトを初期化することについて読んでいて、それを見つけました

- (id)initWithCoder:(NSCoder *)aDecoder 

する方法です。しかし、私はこれを回避することができません。誰かがこれを行う方法の簡単な例を教えてもらえますか?

ありがとうございます

4

2 に答える 2

4

次の方法で使用できます。

.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;
}

ハッピーコーディング...

于 2012-05-21T13:43:10.450 に答える
4

この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];

この回答からの例

于 2012-05-21T13:26:47.040 に答える