初始化超级初始化和其他

时间:2013-04-24 14:02:38

标签: ios objective-c xcode

我收到以下错误:

on the line self = [super init];

无法分配自我外部方法init系列

也会在所有self.whatever = what;

上获得黄色三角形

“what”的本地声明隐藏实例变量

@synthesize firstName, lastName, emailAdress, password, admin;

//current course funkade med nil men inte @"" vrf ;P
-(id) init
{
    return [self initwithName:@"" lastName:@"" password:@"" admin:@"" currentCourse:nil];
}

-(id) initwithName:(NSString *) firstName
          lastName:(NSString *) lastName
          password:(NSString *) password
             admin:(NSString *) admin
     currentCourse:(NSDictionary *) course
{
    self = [super init];
    if (self) {
        self.firstName = firstName;
        self.lastName = lastName;
        self.password = password;
        self.admin = admin;

    }
    return self;
}

2 个答案:

答案 0 :(得分:2)

您已合成@synthesize firstName, lastName, emailAdress, password, admin;

在您的方法中,您使用相同的名称

-(id) initwithName:(NSString *) firstName
          lastName:(NSString *) lastName
          password:(NSString *) password
             admin:(NSString *) admin
     currentCourse:(NSDictionary *) course

如果您的编译器支持自动合成

,请将这些更改为其他内容或删除synthesize
-(id) initWithName:(NSString *) aFirstName
          lastName:(NSString *) aLastName
          password:(NSString *) aPassword
             admin:(NSString *) aAdmin
     currentCourse:(NSDictionary *) aCourse
{
    self = [super init];
    if (self) {
        self.firstName = aFirstName;
        self.lastName = aLastName;
        self.password = aPassword;
        self.admin = aAdmin;

    }
    return self;
}

答案 1 :(得分:1)

Anoop已经确定了属性内容,但您的第一个问题仍未得到答复。

我的第一篇文章是 “ 我认为你不能分配给self的原因是你的init方法签名不正确。

我不是100%肯定这一点,但我认为对于X的实现,init应该返回(X *) “ 这是假的 - (id)init;是完全有效的。

错误信息对于以下内容感觉不完全准确,但在您的问题中,在 - (id)init中,您调用[self initWith ....],但此时,self尚未设置。如果你想编写一次该代码,你将不得不重构,但更好的解决方案,恕我直言,

- (id) init {
    self = [super init];
    if ( self) {
        self.firstName = @"";
        self.lastName = @"";
        self.password = @"";
        self.admin = @"";
    }
    return self;
}

对于奖励积分,我还想指出你不使用/设定课程:)