为什么我的Objective-C对象不想被实例化?

时间:2010-01-13 13:31:06

标签: iphone objective-c initialization

我有一个问题(在Objective-C / iPhone开发中),因为有一个多星期了,所以如果有人可以帮助我,我会非常感激。

当我从我编写的类中实例化一个对象时,它返回nil,但是当我启动调试模式时,我实际上在 init 方法中看到self的属性是正确的初始化,似乎它不执行返回自我指令。

编辑:

感谢您的回答这是初始代码

-(id)initWithDate:(NSString *)aDate
             type:(NSString *)aType
           amount:(NSString *)anAmount
         currency:(NSString *)aCurrency
     merchantName:(NSString *)aMerchant
           status:(NSString *)aStatus
{
    if (!(self = [super init])) return nil;
    self->date=aDate;
    self->type=aType;
    self->amount=anAmount;
    self->currency=aCurrency;
    self->merchantName=aMerchant;
    self->status=aStatus;
    return self;
}

3 个答案:

答案 0 :(得分:1)

我将您的代码放在以下

    if (self = [super init]) {
        // Custom initialization
    }
    return self;

而不是if(!(自我...返回nil你已经使用过。但这只是一种习惯。

我也会避免使用C ++样式' - >'赋值而是使用self.currency = aCurrency; (或[self setCurrency:aCurrency];这更接近我猜的c ++调用)假设这些被声明为@property或者有getter和setter。

我相信其中一个会帮助你!

答案 1 :(得分:1)

请勿使用self->instanceVariable

只需使用instanceVariable

答案 2 :(得分:0)

你应该写

self.date = aDate;
// etc.... 

如果在date中将@property等声明为@interface,或者它只是一个类实例变量,请使用

date = aDate;
// etc...

此外,如果字符串未使用@propertyretain修饰符声明为copy,则您需要手动retain它们:

date = [aDate retain];