Доступ к свойству возвращенного объекта вызывает EXC_BAD_ACCESS - PullRequest
1 голос
/ 28 сентября 2011

У меня определен класс, в котором два верхних свойства доступны без проблем.Только UIColor* является проблемой.Я полагаю, что что-то не распределяется, не инициализируется, не сохраняется или не высвобождается должным образом и меняет разные вещи без успеха.Любая помощь будет грандиозной.

// PieceScore.h

@interface PieceScore : NSObject {
    int     pieceCount;
    BOOL    greatMatch;
    UIColor *colorMatched;
}

@property (nonatomic) int pieceCount;
@property (nonatomic) BOOL greatMatch;
@property (nonatomic, retain) UIColor *colorMatched;

-(id) initWithPieceCount:(int)pC withGreatMatch:(BOOL)gM withColorMatched:(UIColor*)cM;

@end


// PieceScore.m

@implementation PieceScore

@synthesize pieceCount, greatMatch, colorMatched;

-(id) init {
    return [self initWithPieceCount:0 withGreatMatch:NO withColorMatched:[UIColor clearColor]];
}

-(id) initWithPieceCount:(int)pC withGreatMatch:(BOOL)gM withColorMatched:(UIColor*)cM {
    self = [super init];
    if (self) {
        pieceCount = pC;
        greatMatch = gM;
        colorMatched = cM;
    }
    return self;
}

@end

Она инициализируется и возвращается другим классом следующим образом:

PieceScore* pieceScore = [[[PieceScore alloc] initWithPieceCount:piecesRemoved withGreatMatch:greatMatch withColorMatched:pieceColor] autorelease];
return pieceScore;

ПРИМЕЧАНИЕ: (pieceColor является UIColor*)

Затем UIColor* используется в методе еще одного класса:

- (void) labelRender:(UILabel*)label withColor:(UIColor *)color {
    // ...

    label.textColor = color; // Thread 1: Program received signal: "EXC_BAD_ACCESS".

    // ...
}

В представлении отладки я вижу, что color фактически передается как UIColor*,но выдает ошибку, когда присваивается свойству textColor метки.

Ответы [ 2 ]

0 голосов
/ 28 сентября 2011

ivars в вашем initWithPieceCount :ieceRemoved: withGreatMatch: withColorMatched необходимо убедиться, что они сохраняют любые значения, которые могут быть предоставлены как автоматически выпущенные. Вы не должны использовать свойства в своих методах init,

Смотрите здесь для обсуждения

так же сохраните переданный объект.

т.е. colormatched = [cM сохранить];

0 голосов
/ 28 сентября 2011

Вы устанавливаете ivar в автоматически выпущенную переменную. Убедитесь, что вы используете свойство, чтобы оно правильно сохранялось.

Изменить colorMatched = cM; на self.colorMatched = cM;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...