Apple の WWDC 2010 コードから TableViewUpdates/TVAnimationGestures を調べましたが、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 で、IB にドラッグしたばかりの UITableViewCell のクラスを TargetDetailTableViewCell に変更します。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 の例と私の例との違いは、IB で UITableViewCell のサブクラスを Ctrl キーを押しながらクリックすると、File's Owner プロパティが設定されていることだけです。セルを使用するクラスのプロパティとして宣言されているため、コンセントをどのように接続したかはわかりませんが、物理的な IB 接続はありません。誰かが私にそれを説明できますか、それとも私が間違っていることを説明できますか?
また、誰かがこれを説明できれば、それは素晴らしいことです:
UINib *nib = [UINib nibWithNibName:@"TargetDetailTableViewCell" bundle:nil];
[nib instantiateWithOwner:self options:nil];
cell = self.TargetCell;
self.TargetCell = nil;
ペン先を作成し、メモリからインスタンス化されるペン先の所有者は、あなたがいるクラスまたは自己(私のビューコントローラー)です。それから最後の 2 行は私を混乱させます。新しく作成されたオブジェクトを指すようにセルに指示し、次に新しく作成されたオブジェクトを nil に設定するようなものです。私の頭の中では、セルもnilを指していると思います。ありがとう。