3

我正在创建一个简单的 Web 浏览器并希望实现选项卡。为此,我使用NSTabView. 我基本上希望每个选项卡都有一个WebView显示已加载网站的选项卡。我只从一个选项卡开始,并希望在创建新选项卡时添加第一个选项卡的精确副本。我尝试了类似tabView.addTabViewItem(tabView.tabViewItemAtIndex(0).copy() as NSTableViewItem)的方法,但出现unrecognised selector sent to instance错误。我已经检查了两者的文档NSTableViewNSTableViewItem但无法弄清楚如何做到这一点。

编辑 我的整个错误如下所示:

015-03-14 17:15:57.884 Browser[1955:56547] -[NSTabViewItem copyWithZone:]: unrecognized selector sent to instance 0x600000100b40
2015-03-14 17:15:57.884 Browser[1955:56547] -[NSTabViewItem copyWithZone:]: unrecognized selector sent to instance 0x600000100b40
4

2 回答 2

3

感谢Copy NSView in cocoa和@MattyAyOh 的回答,我通过以下方式解决了我的问题:

var data = NSKeyedArchiver.archivedDataWithRootObject(view)
var newView = NSKeyedUnarchiver.unarchiveObjectWithData(data) as NSView
newTab.view = newView
tabView.addTabViewItem(newTab)
于 2015-03-15T20:02:33.553 回答
0

因此,您收到该错误是因为您正在调用copy()尚未-copyWithZone实现的对象。(因为 NSTabViewItem 子类 NSView 不符合NSCopying协议)

你可以做的是初始化一个新的NSTabViewItem,然后从第一个项目(tabViewItemAtIndex(0))中获取属性,然后将它们设置为你的新NSTabViewItem

文档

您可以调用setLabel, setIdentifier, setColor, setView, 和setTooltip

一旦你初始化并设置了你的 new NSTabViewItem,你就可以将它添加到你的NSTabView

NSTabViewItem *tempTabViewItem = [NSTabViewItem new];
//set your properties on tempTabViewItem here
tabView.addTabViewItem(tempTabViewItem);
于 2015-03-14T15:55:10.393 回答