我有问题,我找不到原因。我有菜单和应用程序崩溃,只要应用程序名称菜单项,或文件或编辑被选中。其他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崩溃,我使用了所有的仪器工具,没有发现任何东西…
如果有用,下面是崩溃点的汇编代码:
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。没有僵尸,分配,泄漏或任何其他可以用任何工具捕获的东西-我需要重复这一点…
我不能评论你的代码只看到接口文件。您应该参考MenuItemView代码。"MenuItemView"是一个Cocoa应用程序,演示了在NSMenuItems中嵌入nsview。本示例旨在展示如何使用各种用户界面元素(如控件和应用程序的菜单栏)完成此操作。你也可以参考GNUstep GUI编程的第一步:NSApplication, NSMenu.