为什么我自己的Object没有填充NSMutableArray属性?

时间:2012-08-18 18:58:47

标签: objective-c nsmutablearray

您好我想实现自己的对象来管理我的数据,我试图创建两个类。

包含大陆对象的类别大陆

这是我的实施:

@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属性。

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]);

但总是在de count Method中得到ZERO。

注意:NSLog(@“%@”,[con getContinente])打印数据OK,大陆对象没问题,问题出现在大陆对象内的“* continentes”中 -

任何线索?

1 个答案:

答案 0 :(得分: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,以便子类可以获取它。