EXC_BAD_ACCESS (SIGILL) Cra sh при использовании Autolayout? - PullRequest
1 голос
/ 26 апреля 2020

Этот cra sh произошел только на iOS 10.2.1, другие устройства или симуляторы в порядке. Поскольку у меня нет iOS 10.2.1 устройства или симулятора, невозможно воспроизвести.

Здесь Cra sh Log (ссылка на Github).

То, что я сделал, это выборка данных с сервера и reloadData на UITableView. Разбился пока reloadData. Все операции находятся в блоке основной очереди.

Некоторый код в UITableViewCell, как показано ниже:


- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {

        [self.contentView addSubview:self.avatarImageView];
        [self.contentView addSubview:self.messageBackgroundView];
        [self.messageBackgroundView addSubview:self.messageTextView];
    }
    return self;
}

+ (BOOL)requiresConstraintBasedLayout {
    return YES;
}

- (void)prepareForReuse {
    [super prepareForReuse];

    [self.messageBackgroundView mas_remakeConstraints:^(MASConstraintMaker *make) {

    }];
}

- (void)updateConstraints {

    [self.avatarImageView mas_remakeConstraints:^(MASConstraintMaker *make) {

        make.size.mas_equalTo(CGSizeMake(38, 38));
        make.top.equalTo(self.contentView.mas_top).offset(9).priorityHigh();
        if (self.myself) {
            make.trailing.equalTo(self.contentView.mas_trailing).offset(-18);
        } else {
            make.leading.equalTo(self.contentView.mas_leading).offset(18);
        }

    }];

    [self.messageBackgroundView mas_remakeConstraints:^(MASConstraintMaker *make) {

        if (self.myself) {
            make.trailing.equalTo(self.avatarImageView.mas_leading).offset(-9);
            make.leading.mas_greaterThanOrEqualTo(self.contentView.mas_leading).offset(44);
        } else {
            make.leading.equalTo(self.avatarImageView.mas_trailing).offset(9);
            make.trailing.mas_lessThanOrEqualTo(self.contentView.mas_trailing).offset(-44);
        }

        make.top.equalTo(self.avatarImageView.mas_top);
        make.bottom.equalTo(self.contentView.mas_bottom).offset(-9).priorityHigh();
    }];

    [self.messageTextView mas_updateConstraints:^(MASConstraintMaker *make) {
        make.edges.equalTo(self.messageBackgroundView).insets(UIEdgeInsetsMake(8, 14, 8, 14));
        make.height.equalTo(@(self.textViewHeight));
    }];

    [super updateConstraints];
}

- (void)setMessage:(GWBaseModel *)message {

    _message = message;

    // ... update ui, set height for textview

    [self setNeedsUpdateConstraints];

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