EXC_BAD_ACCESS из-за PostNotification - PullRequest
3 голосов
/ 15 июня 2010

Я столкнулся с одной проблемой, связанной с одним модулем, позвольте мне очистить поток для того же.

У меня есть одна настроенная UITableviewCell.

Когда я получаю новую информацию, я публикую одно уведомление

[[NSNotificationCenter defaultCenter] postNotificationName:KGotSomething object:nil userInfo:message];

Ввиду того, что я веду таблицу, я инициирую настроенную ячейку

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    cell= [[CustomCell alloc] initWithFrame: reuseIdentifier:identifier document:doc];
    return cell;
}

теперь в customcell.mm

- (id)initWithFrame:(CGRect)frame reuseIdentifier:(NSString *)reuseIdentifier 
{
[[NSNotificationCenter defaultCenter] addObserver:self 
                 selector:@selector(GotSomething:) 
                         name:KGotSomething 
                        object:nil];
}

и в dealloc

- (void)dealloc 
{
    [[NSNotificationCenter defaultCenter] removeObserver:self
                    name:KGotSomething 
                       object:nil];
}

Теперь мое приложение вылетает из-за этого уведомления, и dealloc никогда не вызывается.

Можете ли вы, ребята, помочь мне, как заставить это работать или что-то, что я делаю здесь не так ...

Спасибо

Сагар

1 Ответ

6 голосов
/ 15 июня 2010
Методы

You initWithFrame:reuseIdentifier: и dealloc являются неполными. Это специально?

initWithFrame:reuseIdentifier: должен содержать вызов супер:

- (id)initWithFrame:(CGRect)frame reuseIdentifier:(NSString *)reuseIdentifier 
{
    self = [super initWithFrame:frame reuseIdentifier:reuseIdentifier];
    if (self) {
        [[NSNotificationCenter defaultCenter] addObserver:self 
                 selector:@selector(GotSomething:) 
                         name:KGotSomething 
                        object:nil];
    }
    return self;
}

и dealloc тоже:

- (void)dealloc 
{
    [[NSNotificationCenter defaultCenter] removeObserver:self
                    name:KGotSomething 
                       object:nil];
    [super dealloc];
}

Обновление

Ячейка не освобождается автоматически после ее создания. Таким образом, клетка протекает и никогда не освобождается. Код должен быть:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    cell= [[CustomCell alloc] initWithFrame: reuseIdentifier:identifier document:doc];
    return [cell autorelease];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...