2013-07-31 1 views
-3

Это очень распространенный вопрос, на SO, хотя у меня есть Google и перепроверить мой код несколько раз, но я не в состоянии выяснить авариюUITableView CustomCell аварии на кнопку Нажмите

*** -[MyCustomCell performSelector:withObject:withObject:]: message sent to deallocated instance 0x96f6980 

У меня есть CustomCell имени MyCustomCell с XIB, где у меня есть 3 кнопки для Facebook, Twitter, LinkedIn. Я дал им все IBAction в классе CustomCell.

Когда я нажимаю на любой из них, я получаю такой крах.

Я использую ARC.

В моем классе ViewController меня cellForRowAtIndexPath

{ 
     static NSString *CellIdentifier = @"MyCustomCell"; 
     MyCustomCell *cell = (MyCustomCell*)[myTableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

     if (cell == nil) 
     { 
      NSArray *nib = [[NSBundle mainBundle] loadNibNamed:CellIdentifier owner:self options:nil]; 
      cell = (MyCustomCell *)[nib objectAtIndex:1]; 
     } 
     return cell; 
} 


MyCustomCell.m 

- (IBAction)facebookPressed:(BaseButton *)sender { 

} 
- (IBAction)twitterPressed:(BaseButton *)sender { 

} 
- (IBAction)linkedInPressed:(BaseButton *)sender { 

} 
+0

Куда записываются эти события кнопок? и действительно ли вы навязываете им все действия? –

+0

@ Roshni Можете ли вы добавить код для действия вашей кнопки. – icodebuster

+0

События кнопок записаны в классе MyCustomCell – Heena

ответ

1

Я сделал эту ошибку только сегодня! :) все, что вам нужно сделать, это заменить 2 строки

NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"NameOfCustomCellNibFile" owner:self options:nil]; 
cell = [nib objectAtIndex:1]; 

Вы должны загрузить loadNibNamed: с именем .xib файла. Я также думал, что это с идентификатором, но это касается имени, на которое ссылаются в ячейке, а не на nib для ячейки.

Надеюсь, это поможет!

+0

Это не работает, и я сам использовал CellIdentifier с именем XIB – Heena

+0

то что такое MyCustomCell? – user2277872

+0

попробуйте изменить NSArray * nib = [[NSBundle mainBundle] loadNibNamed: @ "NameOfCustomCellNibFile" владелец: self options: nil]; NSArray * nib = [[NSBundle mainBundle] loadNibNamed: @ «MyCustomCell» владелец: self options: nil]; – user2277872

1
  1. Вы должны сохранить имя класса ячейки и имена XIB одинаковыми.
  2. Держите владельца ноль вообще.
  3. Кроме того, если в вашем случае имеется только 1 вид (например, 1 UITableViewCell), то это представление доступно в индексе 0 вместо индекса 1.
  4. Внутри файла XIB убедитесь, что вы привязываете кнопку к виду сам, т.е. IBOutlet или IBAction.
  5. Связанные кнопки должны быть добавлены к вашему виду, а не плавать снаружи в XIB. В противном случае они будут создавать экземпляры и появляться по другим индексам загруженного массива. Если вам не нужна определенная кнопка в течение некоторого времени, просто держите ее скрытой.

Таким образом, код может быть, как показано ниже:

NSArray *views = [[NSBundle mainBundle] loadNibNamed:@"MyCustomCell" owner: nil options:nil]; 
MyCustomCell *cell = (MyCustomCell*)[views objectAtIndex:0]; 

Далее убедитесь, что вы выполните следующие действия для создания XIB

Ok, то здесь идет другая часть простой процесс:

  1. Создайте класс MyCustomCell, полученный из класса UITableViewCell.
  2. Создайте отдельный .xib-файл с тем же именем, что и MyCustomCell.xib.
  3. Открыть .xib и удалить существующий вид в нем. перетащите новый
    UITableViewCell из объектов редактора.
  4. См. Изображение, чтобы изменить имя класса UITableViewCell в XIB на имя вашего класса. enter image description here
  5. Теперь объектAtIndex 0 вернет MyCustomCell.
  6. Добавьте все свои кнопки и другие представления в этот UITableViewCell вашего XIB.
+0

1. Оба названия одинаковы. 2.Я еще не пытайся с владельцем = ноль 3.На индекс 0 Я получаю UITableViewCell и не MyCustomCell 4.I не создали IBOutlet как мне нужно только IBAction 5.Buttons имеют в виду сам – Heena

+0

Хорошо, тогда здесь идет другая часть простого процесса: 1. Создайте класс MyCustomCell, полученный из класса UITableViewCell. 2. Создайте отдельный .xib-файл с тем же именем, что и MyCustomCell.xib. – CodenameLambda1

+0

Я хочу указать имя Идентификатора в XIB как «MyCustomCell». Ваш ответ запомнит меня, чтобы перекреститься и с этим. – Heena

1

Вы также можете использовать код для пользовательской ячейки, как этот способ. В nib пользовательской ячейки перетащите один UIButton и установите его в Xib. затем используйте нижеследующий метод: -

UIButton *btnMulSelected; 
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    { 
     NSString *CellIdentifier =[NSString stringWithFormat:@"%d_%d",indexPath.section,indexPath.row]; 
     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
     if (cell == nil) 
     { 
      [[NSBundle mainBundle]loadNibNamed:@"cell_custome_iphones" owner:self options:nil]; 
      cell = self.tblCell; 
      self.tblCell = nil; 

      btnMulSelected =(UIButton*)[cell.contentView viewWithTag:2]; 

      [btnMulSelected addTarget:self action:@selector(MyButtonAction:) forControlEvents:UIControlEventTouchUpInside]; 


     } 
     return cell; 
    } 

Не подключайте IBAction от Nib. просто подключите пользовательскую ячейку IBOutlate или поместите уникальный тег UIButton из nib.