我在Lion中打开一个窗口时收到以下EXC_BAD_INSTRUCTION异常,但该应用似乎在Mountain Lion中正常工作。 可能是什么问题?
Process: MyApp [595] Path: /Users/USER/Desktop/MyApp.app/Contents/MacOS/MyApp Identifier: com.example.MyApp Version: ??? (0.4) Code Type: X86-64 (Native) Parent Process: launchd [146] Date/Time: 2012-09-25 11:09:14.498 +0200 OS Version: Mac OS X 10.7.3 (11D50d) Report Version: 9 Sleep/Wake UUID: BA4DA964-60E8-4DC6-B63C-99435074A41C Interval Since Last Report: 2901634 sec Crashes Since Last Report: 367 Per-App Interval Since Last Report: 129923 sec Per-App Crashes Since Last Report: 8 Anonymous UUID: BFF6E121-730D-4729-B07F-DA8550F46E14 Crashed Thread: 0 Dispatch queue: com.apple.main-thread Exception Type: EXC_BAD_INSTRUCTION (SIGILL) Exception Codes: 0x0000000000000001, 0x0000000000000000 Application Specific Information: objc[595]: garbage collection is OFF objc[595]: cannot form weak reference to instance (0x7fc091666650) of class MyViewController Performing @selector(startPressed:) from sender NSButton 0x7fc09167d210 Thread 0 Crashed:: Dispatch queue: com.apple.main-thread 0 libobjc.A.dylib 0x00007fff91496768 _objc_trap + 4 1 libobjc.A.dylib 0x00007fff914968aa _objc_fatal + 195 2 libobjc.A.dylib 0x00007fff914a24ad weak_register_no_lock + 346 3 libobjc.A.dylib 0x00007fff914a2a59 objc_storeWeak + 360 4 com.apple.CoreFoundation 0x00007fff8f29c75d -[NSObject performSelector:withObject:] + 61 5 com.apple.AppKit 0x00007fff94bb5392 -[NSNibOutletConnector establishConnection] + 405 6 com.apple.AppKit 0x00007fff94bb2a89 -[NSIBObjectData nibInstantiateWithOwner:topLevelObjects:] + 107I'm getting the following EXC_BAD_INSTRUCTION exception when opening a window in Lion but the app appears to work fine in Mountain Lion. What can be the problem?
Process: MyApp [595] Path: /Users/USER/Desktop/MyApp.app/Contents/MacOS/MyApp Identifier: com.example.MyApp Version: ??? (0.4) Code Type: X86-64 (Native) Parent Process: launchd [146] Date/Time: 2012-09-25 11:09:14.498 +0200 OS Version: Mac OS X 10.7.3 (11D50d) Report Version: 9 Sleep/Wake UUID: BA4DA964-60E8-4DC6-B63C-99435074A41C Interval Since Last Report: 2901634 sec Crashes Since Last Report: 367 Per-App Interval Since Last Report: 129923 sec Per-App Crashes Since Last Report: 8 Anonymous UUID: BFF6E121-730D-4729-B07F-DA8550F46E14 Crashed Thread: 0 Dispatch queue: com.apple.main-thread Exception Type: EXC_BAD_INSTRUCTION (SIGILL) Exception Codes: 0x0000000000000001, 0x0000000000000000 Application Specific Information: objc[595]: garbage collection is OFF objc[595]: cannot form weak reference to instance (0x7fc091666650) of class MyViewController Performing @selector(startPressed:) from sender NSButton 0x7fc09167d210 Thread 0 Crashed:: Dispatch queue: com.apple.main-thread 0 libobjc.A.dylib 0x00007fff91496768 _objc_trap + 4 1 libobjc.A.dylib 0x00007fff914968aa _objc_fatal + 195 2 libobjc.A.dylib 0x00007fff914a24ad weak_register_no_lock + 346 3 libobjc.A.dylib 0x00007fff914a2a59 objc_storeWeak + 360 4 com.apple.CoreFoundation 0x00007fff8f29c75d -[NSObject performSelector:withObject:] + 61 5 com.apple.AppKit 0x00007fff94bb5392 -[NSNibOutletConnector establishConnection] + 405 6 com.apple.AppKit 0x00007fff94bb2a89 -[NSIBObjectData nibInstantiateWithOwner:topLevelObjects:] + 107最满意答案
找到了。 问题是我已经声明了一个weak的委托id属性并NSVieWcontroller分配了一个NSVieWcontroller 。
显然,如果你想支持Lion并且安全,你绝不应该将id属性声明为weak 。 从过渡到ARC发行说明 :
注意:此外,在OS X v10.7中,您无法创建对NSFontManager,NSFontPanel,NSImage,NSTableCellView,NSViewController,NSWindow和NSWindowController实例的弱引用。 此外,在OS X v10.7中,AV Foundation框架中的任何类都不支持弱引用。
解决方案:使用assign代替。
@property (nonatomic, assign) IBOutlet id<MyDelegateProtocol> delegate;Found it. The problem was that I had declared a delegate id property with weak and assigned a NSVieWcontroller to it.
Apparently, if you want to support Lion and be safe you should never declare id properties as weak. From the Transitioning to ARC Release Notes:
Note: In addition, in OS X v10.7, you cannot create weak references to instances of NSFontManager, NSFontPanel, NSImage, NSTableCellView, NSViewController, NSWindow, and NSWindowController. In addition, in OS X v10.7 no classes in the AV Foundation framework support weak references.
Solution: use assign instead.
@property (nonatomic, assign) IBOutlet id<MyDelegateProtocol> delegate;更多推荐
发布评论