Мне любопытно, как использовать xib-файл для компоновки содержимого UITableViewCell. Когда я пытаюсь выполнить все шаги, которые я нахожу в Интернете я всегда получаюЗагрузка UITableViewCell из xib (этот класс не соответствует ключевому значению для ключа)
Нагрузочным приложение из-за неперехваченное исключение «NSUnknownKeyException», причины: «[< NSObject 0x10fe7d790 > SetValue: forUndefinedKey]: этот класс не является ключевым значением, совместимым с кодировкой для ключевого statusLabel. '
Так вот код, связанный с
@interface MyCell : UITableViewCell
@property (nonatomic,strong) IBOutlet UILabel* messageLabel;
@property (nonatomic,strong) IBOutlet UILabel* statusLabel;
И в моем UIViewController я попытался как
-(void)viewDidLoad {
[self.tableView registerNib:[UINib nibWithNibName:@"MyCell"
bundle:[NSBundle mainBundle]]
forCellReuseIdentifier:@"CustomCellReuseID"];
}
или с помощью
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"CustomCellReuseID";
MyCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (!cell) {
cell = [[[NSBundle mainBundle] loadNibNamed:@"MyCell" owner:self options:nil]
lastObject];
// or sometimes owner is nil e.g.
//cell = [[[NSBundle mainBundle] loadNibNamed:@"MyCell" owner:nil options:nil]
lastObject];
}
// ... remainder of cell setup
return cell;
}
Оба этих подхода проваливается с исключение, упомянутое в названии. Похоже, что с владельцем: self ошибка происходит потому, что UIViewController не имеет свойств IBOutlet. С владельцем: nil это потому, что он внутренне использует NSObject, который, конечно же, также не имеет свойств IBOutlet.
Единственная работа, которую я нашел, заключается в следующем. В методе init для моей ячейки я добавляю возвращаемое представление/ячейку в свою ячейку инициализации
например.
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
// nil out properties
[self.contentView addSubview:[[[NSBundle mainBundle] loadNibNamed:@"MyCell" owner:self options:nil] lastObject]];
}
return self;
}
Это кажется действительно фальшивым (хотя я могу и просто изменить базовый тип в XIb к UIView вместо MyCell или UITableViewCell), что делает его чувствовать себя немного меньше фальшивым.
Я видел много сообщений, в которых люди сталкиваются с этой конкретной ошибкой. Обычно это объясняется как проблема с подключением в самом xib, однако, если я удалю все соединения в xib, он загружается нормально, но в тот момент, когда я добавляю обратно соединение между элементом ui и владельцем файла, возвращается ошибка, поэтому я не думайте, что это имеет какое-либо отношение к «очистке» xib (даже если посмотреть на XML для xib, нет переуступаемых соединений).
Есть ли у кого-нибудь еще мысли о том, как возникает эта ошибка?
Вы установили «Пользовательский класс» ячейки в файле Nib в «MyClass»? –