iOS – Objective-C no puede eliminar una celda con identificador

'incapaz de eliminar una celda con noticias identificativas: debe registrar una punta o una class para el identificador o conectar una celda prototipo en un guión gráfico'

#import "SidebarViewController.h" #import "SWRevealViewController.h" @interface SidebarViewController () @property (nonatomic, strong) NSArray *menuItems; @end @implementation SidebarViewController NSArray *menuItems; - (id)initWithStyle:(UITableViewStyle)style { self = [super initWithStyle:style]; if (self) { //custom initialization } return self; } - (void)viewDidLoad { [super viewDidLoad]; menuItems = @[@"title", @"news ", @"comments", @"map", @"calendar", @"wishlist", @"bookmark", @"tag"]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } #pragma mark - Table view data source - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { // Return the number of sections. return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { // Return the number of rows in the section. return menuItems.count; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { NSString *CellIdentifier = [menuItems objectAtIndex:indexPath.row]; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; return cell; } @end 

El identificador se ve así:

introduzca la descripción de la imagen aquí

¿Qué puedo hacer con esto?

Estoy tratando de agregar el menu deslizante del lado izquierdo, pero se bloquea cuando presiono el button de menu.

En realidad, eres muy cercano y tu problema es una fuente de frustración para muchos desarrolladores nuevos. Existen dos API distintas, mutuamente exclusivas (¿competidoras?) Para dequeueReusableCell y las ha mezclado accidentalmente juntas.

1.

 - (__kindofUITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier 

introducido en iOs2.0.
Este método es capaz de devolver nil, y cuando lo hace depende de usted crear la celda.

2.

 - (__kindofUITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath 

presentó iOs6.0 Este método no debería ser capaz de devolver nada. Requiere que registres una class UITableViewCell e identificador para cada ruta de índice en la tabla y, a continuación, las celdas se crean 'automágicamente' para ti. (Esto coincidió con la introducción de UICollectionView y es cómo funcionan esos)

Solución. Está utilizando el primer enfoque (que está bien), pero ha usado el método desde el segundo. altere su método cellForRow … a algo como esto:

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { NSString *CellIdentifier = @"someStaticString" ; //btw, it is poor practice to name variables with a capital. Save that for classes/types UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[MYcellClass alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier: CellIdentifier]; } //configure cell return cell; } 

o … registre su class de celda / prototipo e identificador combo con la tablaView (sí, puede usar la misma configuration para todos los índices …) y luego deje su código tal como está.

En mi humilde opinión, este es un error muy común y algo que no está documentado terriblemente bien, solo los chicos que han estado desarrollando desde antes de iOs6 y la introducción del segundo enfoque ven la diferencia sin ayuda. Mejor.

Todas sus células en el ejemplo dado deben tener el mismo identificador porque son muy similares. Icon + text es el contenido de tu celular. El identificador celular describe la estructura común de la célula. Por lo tanto, debe crear un identificador para todas sus celdas y establecer el icono y el título en - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath método - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath .