虽然这些答案是正确的,但问题的根本原因非常微妙,Apple 需要在日志中更新他们的错误消息。当你看到:
Unknown class MyViewCell in Interface Builder file.
它实际上意味着您的源代码缺少@implementation声明或.m 文件尚未添加到目标中。所以检查你的代码并确保你有:
@implementation MyViewCell
@end
UITableViewCell 和 UICollectionViewCell 都是如此。
对于一般情况,我在https://stackoverflow.com/a/12755891/539149进一步讨论了这个问题。
有趣的是,如果您缺少@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)
所以Apple知道这个问题,他们只是在编译期间没有检测到它。我建议不要将自定义单元格放在单独的 nib 中或调用 registerClass: forCellWithReuseIdentifier:。将自定义单元格存储在其容器 UICollectionView 或 Interface Builder 中的 UITableView 内要干净得多。