在我的UITableViewCell中,我有一個方法initNotification,它由創建TableCells的cellForRowAtIndexPath中的TableViewController調用。在自定義UITableViewCell中將Observer添加到NSNotificationcenter的位置?
我的問題是,每當這個視圖重新加載,initNotification方法再次被調用,所以當Notification出現時,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-flag或類似的東西,因爲單元總是被ViewController重新初始化。
是否有正確的方式從NotificationCenter中刪除NotificationHandle?
編輯:這是我如何創建我的自定義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