0

好的,所以我再次面对可怕的message sent to deallocated instance......

  • 我正在使用DMTabBar(基本上是一个类似 Xcode 的 TabBar 控件)
  • 启用 ARC

现在,这是交易:

  • 控件随附的示例工作正常
  • 我已经启用了 Zombies(甚至尝试使用 Instruments 进行调试——老实说——我不知道要寻找什么)
  • deallocated实例是tabBarItemsTabBar 的数组(承载不同按钮的那个)。

这就是我添加项目的方式:

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)。

有任何想法吗?(如果您需要了解其他信息,请告诉我...)

4

2 回答 2

1

您是否尝试使用通常的内存调试技术运行,即

  • 带有僵尸的乐器,以及
  • 在 Xcode 的Edit Scheme > Diagnostics > Memory Management选项卡中设置各种标志?
于 2013-02-26T06:57:11.697 回答
0

仅当它不是对象、委托和 IBoutlet 时才使用 assign。

改变这个:

@property (nonatomic,assign) DMTabBarItem*      selectedTabBarItem;

对此:

@property (nonatomic,strong) DMTabBarItem*      selectedTabBarItem;
于 2013-11-10T04:23:37.517 回答