好的,所以我再次面对可怕的message sent to deallocated instance
......
- 我正在使用DMTabBar(基本上是一个类似 Xcode 的 TabBar 控件)
- 启用 ARC
现在,这是交易:
- 控件随附的示例工作正常
- 我已经启用了 Zombies(甚至尝试使用 Instruments 进行调试——老实说——我不知道要寻找什么)
- 该
deallocated
实例是tabBarItems
TabBar 的数组(承载不同按钮的那个)。
这就是我添加项目的方式:
NSMutableArray* sidebarItems = [@[
[DMTabBarItem tabBarItemWithIcon:[NSImage templateImageNamed:@"One" withSize:iconSize] tag:0 tooltip:@"Files"],
[DMTabBarItem tabBarItemWithIcon:[NSImage templateImageNamed:@"Two" withSize:iconSize] tag:1 tooltip:@"Explorer"],
[DMTabBarItem tabBarItemWithIcon:[NSImage templateImageNamed:@"Three" withSize:iconSize] tag:2 tooltip:@"Bookmarks"],
[DMTabBarItem tabBarItemWithIcon:[NSImage templateImageNamed:@"Four" withSize:iconSize] tag:3 tooltip:@"Search"]
] mutableCopy];
[sidebarTabs setTabBarItems:items];
// Handle selection events
[sidebarTabs handleTabBarItemSelection:^(DMTabBarItemSelectionType selectionType, DMTabBarItem *targetTabBarItem, NSUInteger targetTabBarItemIndex) {
if (selectionType == DMTabBarItemSelectionType_WillSelect) {
[sidebarTabView selectTabViewItem:[sidebarTabView.tabViewItems objectAtIndex:targetTabBarItemIndex]];
} else if (selectionType == DMTabBarItemSelectionType_DidSelect) {
}
}];
这是声明不同元素的方式:
@interface myAppl : NSWindowController
{
IBOutlet DMTabBar* sidebarTabs;
IBOutlet NSTabView* sidebarTabView;
}
这是DMTabBar
的界面(最“重要”的部分):
@interface DMTabBar : NSView {
}
// set an NSArray of DMTabBarItem elements to populate the DMTabBar
@property (nonatomic,strong) NSArray* tabBarItems;
// change selected item by passing a DMTabBarItem object (ignored if selectedTabBarItem is not contained inside tabBarItems)
@property (nonatomic,assign) DMTabBarItem* selectedTabBarItem;
你能解释一下我做错了什么吗?我绝对不是内存管理方面的大师(是的,我承认我还有一些学习要做)但我肯定会因为这个而自杀......
我正在设置tabBarItems
它们,它们似乎在那里(至少一开始是这样)。为什么他们会被释放?(记住控件和项目代码都使用 ARC)。
有任何想法吗?(如果您需要了解其他信息,请告诉我...)