您好我想实现自己的对象来管理我的数据,我试图创建两个类。
包含大陆对象的类别大陆
这是我的实施:
@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”中 -
任何线索?
答案 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
,以便子类可以获取它。