В моем UITableViewCell у меня есть метод initNotification, который вызывается TableViewController в cellForRowAtIndexPath, где создаются TableCells.Где добавитьObserver в NSNotificationcenter в пользовательский UITableViewCell?
Моя проблема заключается в том, что каждый раз, когда это представление перезагружается, метод initNotification вызывается снова, поэтому, когда появляется уведомление, NotificationHandle называется x-times!
Я попытался удалить наблюдателя, прежде чем добавить его снова:
-(void) initNotification{
[[NSNotificationCenter defaultCenter] removeObserver:self];
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(handleNotificationOnOff:)
name:[[NSString alloc] initWithFormat:@"%@",[self.light beckhoffOnOff]]
object:nil];
}
, но это не работает. Проблема в том, что я не могу использовать флаг bool или что-то в этом роде, потому что Cells всегда повторно инициализируются ViewController.
Есть ли способ удалить NotificationHandle из NotificationCenter?
редактировать: Это, как я создаю мои пользовательские TableViewCells
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell;
Light* l = [[staticModel.model getRoomAtIndex:[indexPath section]]getLightAtIndex:[indexPath item]];
if([l typ]==ONOFF){
TableCellLight *conof = [tableView dequeueReusableCellWithIdentifier:@"ReuseIDOnOff" forIndexPath:indexPath];
LightOnOff *lonof = (LightOnOff*) l;
[[conof label] setText: [lonof bezeichnung]];
conof.light=lonof;
[conof initNotification];
cell = conof;
}
if([l typ]==DIMMER){
TableCellLightDim *cdim = [tableView dequeueReusableCellWithIdentifier:@"ReuseIDDim" forIndexPath:indexPath];
LightDim *ldim= (LightDim*) l;
[[cdim label] setText: [ldim bezeichnung]];
[[cdim slider]setValue:[ldim dimVal]];
cdim.light=ldim;
[cdim initNotification];
cell = cdim;
}
if([l typ]==RGB){
TableCellLightRGB *crgb = [tableView dequeueReusableCellWithIdentifier:@"ReuseIDRGB" forIndexPath:indexPath];
LightRGB *lrgb= (LightRGB*) l;
[[crgb label] setText: [lrgb bezeichnung]];
crgb.light=lrgb;
crgb.owner=self;
[crgb initNotification];
cell = crgb;
}
return cell;
}
Благодаря
Спасибо за ответ! Я выяснил, почему removeObserver: не работает, потому что само не то же самое больше, каждый раз, когда TableView перезагружается (и ячейки также), я получаю новый экземпляр каждой ячейки. Есть ли способ заставить ячейки освободиться? – user2071938
Если вы не будете повторно использовать ячейки, они должны быть освобождены (например, у вас нет идентификатора повторного использования). Но это не идеально. – Wain
У меня есть идентификатор повторного использования, но почему это заканчивается для многих экземпляров одной и той же ячейки? – user2071938