Я просмотрел TableViewUpdates / TVAnimationGestures из кода Apple WWDC 2010, и у меня возникли проблемы с дублированием подкласса UITableViewCell.Вот что я сделал:
Я создал новый подкласс UITableViewCell с некоторыми простыми свойствами:
@interface TargetDetailTableViewCell : UITableViewCell
@property (nonatomic, retain) IBOutlet UILabel *DescriptionLabel;
@property (nonatomic, retain) IBOutlet UILabel *ValueLabel;
@property (nonatomic, retain) IBOutlet UIImageView *DotImageView;
В .m я просто освобождаю память.В IB я изменяю свой класс на TargetDetailTableViewCell для UITableViewCell, который я только что перетащил в IB.Я подключаю розетки из TargetDetailTableViewCell к соответствующим меткам и представлению изображения.
В классе я хочу использовать это:
@class TargetDetailTableViewCell;
//some properties
@property (nonatomic, assign) IBOutlet TargetDetailTableViewCell *TargetCell;
В .m:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *TargetCellIdentifier = @"TargetDetailTableViewCellIdentifier";
TargetDetailTableViewCell *cell = (TargetDetailTableViewCell *)[tableView dequeueReusableCellWithIdentifier:TargetCellIdentifier];
if (cell == nil) {
UINib *nib = [UINib nibWithNibName:@"TargetDetailTableViewCell" bundle:nil];
[nib instantiateWithOwner:self options:nil];
cell = self.TargetCell;
self.TargetCell = nil;
}
// set some labels
return cell;
}
При запуске я получаю сообщение об ошибке: Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'UITableView dataSource must return a cell from tableView:cellForRowAtIndexPath:'
Единственное, что я могу увидеть, это различие между примером Apple и моим, состоит в том, что когда я нажимаю ctlr-щелчок по подклассу UITableViewCell в их IB, у них устанавливается свойство File's Owner.Я понятия не имею, как они подключили эту розетку, поскольку она объявлена как свойство в классе, в котором они используют ячейку, но не существует физического соединения IB, которое они устанавливают.Может кто-нибудь объяснить это мне или что я делаю неправильно?
Кроме того, если кто-то может объяснить это, было бы здорово:
UINib *nib = [UINib nibWithNibName:@"TargetDetailTableViewCell" bundle:nil];
[nib instantiateWithOwner:self options:nil];
cell = self.TargetCell;
self.TargetCell = nil;
Кажется, что вы создаете перо ивладельцем пера, который создается из памяти, является класс, в котором вы находитесь или сам (мой viewcontroller).Тогда последние две строки меня смущают.Это как если бы вы указали своей ячейке указывать на вновь созданный объект, а затем устанавливаете для вновь созданного объекта значение nil.Что в моей голове, я думаю, клетка теперь также указывает на ноль.Спасибо.