NSObject无法访问属性和方法

时间:2014-04-07 21:38:33

标签: objective-c unrecognized-selector

我有一个非常奇怪的问题,我有两个类,第一个是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;

任何人都可以告诉我出了什么问题?

另一个类有一个属性,似乎在编译期间无法访问它。 我真的很困惑。

谢谢你, 弥撒

1 个答案:

答案 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}}