0

我有一个项目,我正在使用 Xcode 4.4.1 在 OS X 10.7.4 下编译

我正在使用 Base SDK SDKROOT macosx10.7 我已设置部署目标 MACOSX_DEPLOYMENT_TARGET 10.6

我在 Snow Leopard 上测试了最近的构建,但它崩溃了。以前使用 Xcode 4.2 和 4.3 的构建确实有效,我可以使用 Xcode 版本 3.2.6 在 Snow Leopard 上编译

有没有其他人有过这种经历,或者更好地知道我能做些什么来解决它?

OS Version:      Mac OS X 10.6.8 (10K549)
Report Version:  6

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x0000000000000030
Crashed Thread:  0  Dispatch queue: com.apple.main-thread

Application Specific Information:
objc[274]: garbage collection is ON

Thread 0 Crashed:  Dispatch queue: com.apple.main-thread
0   com.apple.AppKit                 -[NSImage _allocAuxiliaryStorage] + 158
1   com.apple.AppKit                 -[NSImage copyWithZone:] + 66
2   libobjc.A.dylib                  objc_setProperty + 82
3            -[TreeViewController(Dirs) outlineView:willDisplayCell:forTableColumn:item:] + 207

PS 刚刚从 TimeMachine 备份中恢复了 Xcode 4.2.1,并且构建在 Snow Leopard 上工作

我“升级”到了 Mountain Lion——它不允许 Xcode 4.2.1 运行。(这似乎也删除了 OSX 10.8 和 Xcode 4.4 SDK 以及命令行工具 :-( )。这使得仅使用宝贵的编译器变得不可能。

我试图跟进崩溃发生的位置,这似乎是在对 setNodeIcon 的调用中,该调用在我的一个类中定义为

@property (copy) NSImage *nodeIcon;

我意识到我最终将不得不转换为 ARC,但还不愿意开始。转换远非简单,我不确定我是否理解我需要进行的所有更改(一次一个文件),特别是免费桥接更改。

生成的 ARC 代码似乎确实适用于 10.6 - 10.8,但我需要进行大量回归和泄漏测试来确认。


更新评论 2012-09-18

ARC 代码有效,但我发现了几个问题(我已经解决了),但还需要做更多的事情。

我回到我的 GC 代码并更改copyassign. 这似乎奏效了。

@property (assign) NSImage *nodeIcon;

只是为了确认我制作了一个独立的应用程序(见下文),它除了复制一个 NSImage 什么都不做。这以同样的方式崩溃,所以它似乎是编译器中的一个错误。

#import <Cocoa/Cocoa.h>

@interface AppDelegate : NSObject <NSApplicationDelegate> {
    NSImage *nodeIcon;
}

@property (assign) IBOutlet NSWindow *window;
@property (copy) NSImage *nodeIcon;

@end

#import "AppDelegate.h"

@implementation AppDelegate
@synthesize nodeIcon;

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    NSString *defaultDirectory = NSHomeDirectory();
    [self setNodeIcon:[[NSWorkspace sharedWorkspace] iconForFile:defaultDirectory]];
}

@end
4

0 回答 0