-2

こんにちは私は自分のデータを管理するために自分のオブジェクトを実装したいのですが、2つのクラスを作成しようとしていました。

大陸オブジェクトを含むクラス大陸

これが私の実装です:

@implementation OsContinents
@synthesize continentes;


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

-(NSUInteger)count{
    NSLog(@"%u",[continentes count]);
    return [continentes count];
}
-(void)add:(OsContinent *)continente{
    [continentes addObject:continente];
}

-(OsContinent *)getElementByIndex:(NSUInteger)index{
    return [continentes objectAtIndex:index];
}

-(void)deleteContinentByIndex:(NSUInteger)index{
    return [continentes removeObjectAtIndex:index];
}

-(void)deleteContinent:(OsContinent *)objContinent{
    return [continentes removeObject:objContinent];
}

-(NSMutableArray *)getAll{
    return continentes;
}

@end

次に、*continentsプロパティにこのような「Continent」オブジェクトを入力します。

OsContinents *continentesCollection = [[OsContinents alloc] init];
    for (NSString *strContinente in [data allKeys]) {
        OsContinent *con = [[OsContinent alloc] init];
        [con setContinente:strContinente];
            NSLog(@"%@",[con getContinente]);
        [continentesCollection add:con];
    }
    NSLog(@"%u",[continentesCollection count]);

しかし、カウント方法では常にゼロになりました。

注:NSLog(@ "%@"、[con getContinente])print de data OK、Continent Object OK、問題はContinentsObject内の"*continentes"にあります-

どんな手掛かり?

4

1 に答える 1

1

イニシャライザは、スーパークラスを初期化するだけです。これを使用して、独自のクラスを設定します。

- (id)init
{
    self = [super init];
    if (self)
    {
        _continentes = [[NSMutableArray alloc] init];
    }
    return self;
}

それ以外の場合は、continentes残りnilます。メッセージングnilは​​有効です。メソッドは単に何もせず、0を返します。

基になる可変配列を完全に非表示にしたい場合(これは完全に問題ありません)、.hファイルでプロパティとしてアドバタイズしないでください。代わりに、の先頭で@implementation、セミプライベートインスタンス変数を宣言します。

@implementation OsContinents
{
    NSMutableArray *_continentes;
}

ランタイムエンジンを使用してオブジェクトをイントロスペクトできるため、「セミプライベート」と言います。しかし、それは通常の使用から隠されます。オブジェクトをサブクラス化する場合は、いつでもインスタンス変数宣言をからに移動して、サブクラスがオブジェクトを取得できるようにすることができ@implementationます@interface

于 2012-08-18T19:27:18.493 に答える