虽然这些答案是正确的,但问题的根本原因相当微妙,苹果需要在日志中更新他们的错误信息。当您看到:
Unknown class MyViewCell in Interface Builder file.
实际上这意味着您的源代码缺少@implementation声明,或者.m文件尚未添加到目标中。因此,请检查您的代码并确保您有:
@implementation MyViewCell
@end
这对UITableViewCell和UICollectionViewCell都适用。
我在https://dev59.com/z3I-5IYBdhLWcg3wsKl4#12755891中详细讨论了一般情况下的问题。
有趣的是,如果你缺少@implementation并调用:
[self.myCollectionView registerClass:[MyViewCell class] forCellWithReuseIdentifier:@"MyViewCell"]
你将会看到:
Undefined symbols for architecture armv7:
"_OBJC_CLASS_$_MyViewCell", referenced from:
objc-class-ref in MyViewController.o
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)
所以苹果公司知道这个问题,只是在编译过程中没有检测到。我建议不要将自定义单元格放在单独的nib文件中,也不要调用registerClass:forCellWithReuseIdentifier:方法。在Interface Builder中,将自定义单元格直接存储在其容器UICollectionView或UITableView中会更加清晰简洁。