Добавление делегата в пользовательский UITableViewCell (ошибка неверного доступа)
Я пытаюсь добавить пользовательский делегат в мой собственный UITableViewCell.
В этой ячейке у меня есть кнопка, которая должна вызвать метод в ViewController, где находится UITableView.
Я делаю все обычные шаги, чтобы добавить пользовательский делегат, но по какой-то причине, когда я открываю VC во время выполнения, приложение вылетает и выдает мне ошибку неверного доступа.
Когда я комментирую весь код делегата, он работает правильно, поэтому я предполагаю, что что-то не так, когда я добавляю свой делегат. Когда я оставляю свое свойство id без комментариев, оно кажется сбойным.
Я реализую протокол в ВК. Я назначил делегата ячейке в cellForRowAtIndexPath :. Все методы делегата на месте. Я использовал подобные конструкции в других классах, но никогда ранее не был в подклассе UITableViewCells.
Прежде чем опубликовать код, я хотел бы знать, сталкивался ли кто-нибудь с этой ошибкой раньше. Если и как он решил это, или если вообще возможно сделать пользовательский делегат для подкласса UITableViewCell.
РЕДАКТИРОВАТЬ:
Мой customCell.h
#import <UIKit/UIKit.h>
@class MyTableViewCell;
@protocol MyTableCellProtocoll <NSObject>
-(void) didPressButton:(MyTableViewCell *)theCell;
@end
@interface MyTableViewCell : UITableViewCell
{
UIButton *myButton;
id<MyTableCellProtocoll> delegationListener;
}
@property (nonatomic,retain) UIButton *myButton;
@property (nonatomic,assign) id<MyTableCellProtocoll> delegationListener;
- (void) buttonAction;
@end
.m
#import "MyTableViewCell.h"
@implementation MyTableViewCell
@synthesize myButton;
@synthesize delegationListener;
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
// Initialization code
self.myButton = [UIButton buttonWithType:UIButtonTypeCustom];
self.myButton.backgroundColor = [UIColor clearColor];
self.myButton.frame = CGRectMake(5, 0, 10, 32);
self.myButton.titleLabel.adjustsFontSizeToFitWidth = YES;
[self.myButton addTarget:self action:@selector(buttonAction) forControlEvents:UIControlEventTouchUpInside];
[self.contentView addSubview:self.myButton];
}
return self;
}
- (void) buttonAction
{
NSLog(@"buttonpressed");
[self.delegationListener didPressButton:self];
}
@end
MyVC реализует делегата как должного в .h
@interface MyVC : UIViewController <UITableViewDelegate, UITableViewDataSource, MyTableCellProtocoll>
и он также использует один метод делегата из MyTableCellProtocoll в .m
- (void)didPressButton:(MyTableViewCell *)theCell
{
NSLog(@"didPressButton");
}
Я назначаю делегата в cellForRowAtIndexPath:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
MyTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[MyTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
cell.delegationListener = self;
}
return cell;
}
Это все места, которые я использую для делегата. Я хочу изменить заголовок кнопки и вставить несколько строк после этой ячейки (измененные дубликаты).
Надеюсь, это прояснит ситуацию немного больше.
EDIT2: метод кнопки не вызывается при запуске, как было упомянуто в разделе комментариев. Отредактированный код с лог-кодом.
EDIT3: нет ничего плохого в кнопке. Это свойство делегата, которое где-то испорчено. С точками останова, журналами и комментариями я в этом убедился.
Код выполняется до последнего элемента в моем списке источников данных, а затем происходит сбой. 1 шаг ближе к проблеме, я полагаю.
ЗАКЛЮЧИТЕЛЬНОЕ РЕДАКТИРОВАНИЕ: Хорошо, похоже, что все делегаты, кнопки и другие компоненты не были проблемой вообще. Это была высота ForRowAtIndexPath: меня обманывают. Спасибо за вашу поддержку в любом случае!