0

次のエラーが表示されます。

on the line self = [super init];

メソッド init ファミリーの外で自分自身を割り当てることはできません

また、すべての self.whatever に黄色の三角形が表示されます。

「何でも」のローカル宣言はインスタンス変数を隠します

@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;
}
4

2 に答える 2

2

合成しました@synthesize firstName, lastName, emailAdress, password, admin;

そして、あなたの方法では同じ名前を使用しています

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

コンパイラが自動合成をサポートしている場合は、これらを別のものに変更するか、合成を削除します

-(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;
}
于 2013-04-24T14:08:31.413 に答える
1

Anoop はプロパティを釘付けにしましたが、最初の問題は未解決のままです。

私の最初の投稿は「自分自身に代入できない理由は、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;
}

ボーナスポイントとして、コースを使用/設定していないことも指摘したいと思います:)

于 2013-04-24T14:18:30.350 に答える