当我在XCode 4.6中创建一个新的OSX项目,并选择Cocoa Application模板时,我随后在Interface Builder中看到的是NSWindow,NSMenu(预先填充了一些菜单项),以及NSWindow中的NSView.但是,当我尝试删除NSView并用NSTableView替换它,或者将NSView嵌入到NSScrollView中时,我无法这样做.
自动生成的NSView在某种程度上是特殊的吗?NSWindow是否要求NSView位于其上,并且不允许其他一些子类(如NSTableView或NSCollectionView)成为层次结构中的根视图?我知道我可以在Identity Inspector中更改类,但这似乎没有做任何事情.这个新手有什么想法或提示吗?
Animal是一个BOOL名为属性的类alive.Monkey,Zebra并且Walrus是子类Animal.如果我有一个包含混合实例的NSArray调用zoo实例Monkey,Zebra并且Walrus,我想找到第一个活动Zebra实例,我可能会这样做:
Zebra *zebra;
for (Animal *animal in zoo) {
if ([animal isMemberOfClass:[Zebra class]] && animal.alive) {
zebra = animal;
break;
}
}
Run Code Online (Sandbox Code Playgroud)
问题是编译器在设置时抱怨不兼容的指针类型zebra = animal.如果我像那样做一些铸造zebra = (Zebra *)animal似乎工作,但我不确定在Objective-C中这种铸件是否安全.
处理这种情况的更好方法是什么?