我有一个非常奇怪的问题,我有两个类,第一个是NSObject类的子类,它包含一个向其数组添加对象的方法。请参阅以下代码:
#import "portfolio.h"
@implementation portfolio
-(void) addStockObject:(stockHolding *)stock
{
[self.stocks addObject:stock ];
}
+(portfolio *) alloc
{
return [self.superclass alloc];
}
-(portfolio *) init
{
self.stocks=[[NSMutableArray alloc]init];
return self;
}
-(NSString *)getCurrentValue
{
stockHolding *stockInArray;
float currentValue=0.0;
for (NSInteger *i=0; i<[self.stocks count]; i++) {
stockInArray = [self.stocks objectAtIndex:i];
currentValue+=stockInArray.currentValue;
}
return [NSString stringWithFormat:@"Current Value: %f",currentValue];
}
@end
所以当我调用方法 - (void)addStockObject:(stockHolding *)stock时,我得到以下错误(在运行时):
Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason: '-[NSObject addStockObject:]: unrecognized selector
sent to instance 0x8b48d90'
主叫代码是:
p=[[portfolio alloc]init];
[p addStockObject:s];
portfolio *p;
任何人都可以告诉我出了什么问题?
另一个类有一个属性,似乎在编译期间无法访问它。 我真的很困惑。
谢谢你, 弥撒
答案 0 :(得分:2)
首先,永远不要覆盖+(portfolio *) alloc
。
其次,init方法必须调用另一个init方法,并且在设置ivars之前必须始终检查self
nil
。 Apple建议不要使用属性在init方法中设置ivars,并且init方法应该总是在支持它的编译器中返回instancetype
,或者在那些不支持的id
中返回-(instancetype) init
{
self = [super init];
if (self)
{
_stocks = [[NSMutableArray alloc] init];
}
return self;
}
。
{{1}}