好的,所以我再次面对可怕的message sent to deallocated instance
......
现在,这是合约:
deallocated
实例是TabBar的tabBarItems
数组(托管不同按钮的数组)。这是我添加项目的方式:
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)。
有什么想法吗? (如果您需要了解其他任何事情,请告诉我。)
答案 0 :(得分:1)
您是否尝试使用通常的内存调试技术运行,即
答案 1 :(得分:0)
仅当它不是对象,委托和IBoutlet时才使用assign。
改变这个:
@property (nonatomic,assign) DMTabBarItem* selectedTabBarItem;
到此:
@property (nonatomic,strong) DMTabBarItem* selectedTabBarItem;