コレクションビューで最初に思い切って、このエラーに遭遇しています:
NS
以下に示すように、コードは非常に単純です。私の人生では、私が行方不明になっていることを理解することはできません。
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath];
cell.backgroundColor = [UIColor whiteColor];
return cell;
}
Collection View Controllerはnibを使用して作成され、デリゲートとデータソースは両方ともファイルの所有者に設定されています。
View Controllerのヘッダーファイルも非常に基本的です。
@interface NewMobialViewController_3 : UICollectionViewController <UICollectionViewDataSource, UICollectionViewDelegateFlowLayout>
@end
Dequeueメソッドの ICollectionViewドキュメント から:
重要:このメソッドを呼び出す前に、registerClass:forCellWithReuseIdentifier:またはregisterNib:forCellWithReuseIdentifier:メソッドを使用してクラスまたはnibファイルを登録する必要があります。
DequeueReusableCellWithReuseIdentifierの引数とUICollectionViewCellのプロパティの間で同じ識別子を使用する必要があります。
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"CollectionViewCell" forIndexPath:indexPath];
@jrtutonが書いたものを補完する...必要なものは:
1)nibファイルを登録して、識別子と「接続」します。
//MyCollectionView.m
- (void) awakeFromNib{
[self registerNib:[UINib nibWithNibName:@"NibFileName" bundle:nil] forCellWithReuseIdentifier: @"MyCellIdentifier"];
}
2)識別子を使用して、ペン先からカスタムセルを読み込みます。
//MyCollectionView.m
- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath {
MyCustomCollectionViewCell* cell = [cv dequeueReusableCellWithReuseIdentifier:@"MyCellIdentifier" forIndexPath:indexPath];
}
3)常に静的なNSString *を使用して、アプリで同じ識別子が再び使用されないようにします。
私はすべてが100%正しく行われました。しかし、何らかの理由で私は1時間同じエラーを受け取りました、そして私がやったことは:
単純に、このステップを以前に修正していても、やり直しました。そのようなxcodeは特定のナノ秒で何かを見逃しています!
Swift4.
UITableViewCell
がxibのときはいつでも、UITableView
に登録する必要があります。
override func viewDidLoad(){
super.viewDidLoad()
self.yourtableview.register(UINib(nibName: "yourCellXIBname", bundle: Bundle.main), forCellReuseIdentifier: "YourCellReUseIdentifier")
}
Swift 5
1)HEADERの正しい両端キューがあることを確認します。通常のセルには通常を使用している可能性があります。
override func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
let header = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: headerId, for: indexPath)
return header
}
2)登録を確認します(ViewDidLoad)
collectionView.register(HeaderCell.self, forSupplementaryViewOfKind: UICollectionView.elementKindSectionHeader, withReuseIdentifier: headerId)
ストーリーボードで正しい再利用可能な識別子を指定する必要があります。これは、collectionViewCellの登録時にコードで指定します。
これがコードです。
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "ClctnVC", for: indexPath)as! ClctnVC
return cell
}
Xibの代わりにstoryboardを使用している場合、ここにいくつかの手順があります。
ColletionViewDelegateで。
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "YourCellName", for: indexPath)as! YourCellName
return cell
}
それでおしまい。また、do n'tを追加したいregisterClass:forCellWithReuseIdentifier:要素nilエラーが発生します。
私はこれが古いものであることを知っていますが、私は同じ問題を経験しており、それが私のために修正したものを共有したかったです。
私の場合、グローバル識別子を宣言しました
let identifier = "CollectionViewCell"
そして、使用する直前にselfを使用する必要がありました。
collectionView.dequeueReusableCellWithReuseIdentifier(self.identifier, forIndexPath: indexPath) as! CollectionViewCell
これが誰かを助けることを願っています:)
私にとってこれを修正したのは(ほぼ)Omarの答えと同じでしたが、新しいUICollectionViewCellカスタムクラスを作成し、Cell Reuse Indentifierにアプリケーションの他の場所で使用した名前とは異なる新しい名前を付けました。その後すぐに機能しました。