单击NSMenu项会导致崩溃

时间:2011-10-11 10:43:19

标签: macos cocoa

我有问题我找不到原因。一旦选择了应用程序名称菜单项或文件或编辑,我就会出现菜单和应用程序崩溃的情况。其他4个菜单选项工作正常。

我无法跟踪错误,因为只要您选择菜单下拉菜单就会发生崩溃,实际上您甚至都没有选择菜单选项。

这是声明代码:

    IBOutlet NSMenu *miFile;
IBOutlet NSMenuItem *miNewProduct;
IBOutlet NSMenuItem *miDeleteProduct;
IBOutlet NSMenuItem *miDataupdateUndo;
IBOutlet NSMenuItem *miExit;

IBOutlet NSMenu *miEdit;

IBOutlet NSMenu *miExtra;
IBOutlet NSMenuItem *miSettings;
IBOutlet NSMenuItem *miFilestoreCleanup;
IBOutlet NSMenuItem *miEAN;
IBOutlet NSMenuItem *miBeatport;

IBOutlet NSMenu *miInvoice;
IBOutlet NSMenuItem *miInvoicePreview;
IBOutlet NSMenuItem *miInvoiceEnd;
IBOutlet NSMenuItem *miInvoiceExport;
IBOutlet NSMenuItem *miAccounting;

IBOutlet NSMenu *miStockList;
IBOutlet NSMenuItem *miServerRecieve;
IBOutlet NSMenuItem *miExport;
IBOutlet NSMenuItem *miImportModule;

IBOutlet NSMenu *miHelp;
IBOutlet NSMenuItem *miSendProtocol;
IBOutlet NSMenuItem *miHelpLink;
IBOutlet NSMenuItem *miReleaseNotes;
IBOutlet NSMenuItem *miCheckUpdate;
IBOutlet NSMenuItem *miRebeatDotCom;
IBOutlet NSMenuItem *miAbout;

有没有人有想法,什么可能导致崩溃?这是EXC_BAD_ACCESS崩溃,我使用了所有Intsruments工具,什么都没找到......

如果有用,这是崩溃点的汇编代码:

0x00007fff8461d39c  <+0000>  push   %rbp
0x00007fff8461d39d  <+0001>  mov    %rsp,%rbp
0x00007fff8461d3a0  <+0004>  push   %r14
0x00007fff8461d3a2  <+0006>  push   %rbx
0x00007fff8461d3a3  <+0007>  mov    (%rdi),%rbx   ///CRASH
0x00007fff8461d3a6  <+0010>  cmp    %rsi,%rbx
0x00007fff8461d3a9  <+0013>  je     0x7fff8461d3c6     <_ZN11TCFRetainedIPK8__CTFontE6RetainES2_+42>
0x00007fff8461d3ab  <+0015>  mov    %rdi,%r14
0x00007fff8461d3ae  <+0018>  test   %rsi,%rsi
0x00007fff8461d3b1  <+0021>  je     0x7fff8461d3be <_ZN11TCFRetainedIPK8__CTFontE6RetainES2_+34>
0x00007fff8461d3b3  <+0023>  mov    %rsi,%rdi
0x00007fff8461d3b6  <+0026>  callq  0x7fff8469c642 <dyld_stub_CFRetain>
0x00007fff8461d3bb  <+0031>  mov    %rax,%rsi
0x00007fff8461d3be  <+0034>  mov    %rsi,(%r14)
0x00007fff8461d3c1  <+0037>  test   %rbx,%rbx
0x00007fff8461d3c4  <+0040>  jne    0x7fff8461d3cb <_ZN11TCFRetainedIPK8__CTFontE6RetainES2_+47>
0x00007fff8461d3c6  <+0042>  pop    %rbx
0x00007fff8461d3c7  <+0043>  pop    %r14
0x00007fff8461d3c9  <+0045>  pop    %rbp
0x00007fff8461d3ca  <+0046>  retq   
0x00007fff8461d3cb  <+0047>  mov    %rbx,%rdi
0x00007fff8461d3ce  <+0050>  pop    %rbx
0x00007fff8461d3cf  <+0051>  pop    %r14
0x00007fff8461d3d1  <+0053>  pop    %rbp
0x00007fff8461d3d2  <+0054>  jmpq   0x7fff8469c63c <dyld_stub_CFRelease>
0x00007fff8461d3d7  <+0059>  nop    

菜单完全在IB中创建。它是在10.7.2上运行的。 10.6也崩溃了。使用GC。没有僵尸,分配,泄漏或任何其他可以用任何仪器捕获的东西 - 我需要重复这一点......

1 个答案:

答案 0 :(得分:0)

我只能通过查看界面文件来评论您的代码。你应该参考MenuItemView代码。 “MenuItemView”是一个Cocoa应用程序,它演示了在NSMenuItems中嵌入NSView。此示例旨在说明如何使用各种用户界面元素(如控件)以及应用程序的菜单栏完成此操作。您也可以参考 First Steps in GNUstep GUI Programming: NSApplication, NSMenu

相关问题