Cocoa NSWorkspace setIcon:forFile:选项:崩溃

Cocoa NSWorkspace setIcon:forFile:选项:崩溃,cocoa,Cocoa,我有时会在[NSWorkspace setIcon:forFile:options:]API上遇到崩溃 感谢您的帮助。 这是崩溃堆栈 0 libsystem_kernel.dylib 0x00007fff85bfbe56 __semwait_signal_nocancel + 10 1 libsystem_c.dylib 0x00007fff8c04818b nanosleep$NOCANCEL + 139 2 libsystem_c.d

我有时会在[NSWorkspace setIcon:forFile:options:]API上遇到崩溃

感谢您的帮助。 这是崩溃堆栈

0   libsystem_kernel.dylib          0x00007fff85bfbe56 __semwait_signal_nocancel + 10
1   libsystem_c.dylib               0x00007fff8c04818b nanosleep$NOCANCEL + 139
2   libsystem_c.dylib               0x00007fff8bfe7c78 usleep$NOCANCEL + 53
3   libsystem_c.dylib               0x00007fff8bfe7aa6 abort + 187
4   libsystem_c.dylib               0x00007fff8c04684c free + 389
5   com.apple.CoreServices.CarbonCore   0x00007fff8df7aaf7 CSMemDisposePtr + 23
6   com.apple.CoreServices.CarbonCore   0x00007fff8df7aaba CSMemDisposeHandle + 79
7   com.apple.CoreServices.CarbonCore   0x00007fff8df7c355 DisposeHandle + 9
8   com.apple.AppKit                0x00007fff90356598 -[NSWorkspace setIcon:forFile:options:] + 566
这是代码

static NSImage  *FolderIcon = nil;

if(!FolderIcon) {
        FolderIcon = [[NSImage imageNamed:@"xxx.icns"] retain];
}

if(![[NSWorkspace sharedWorkspace] setIcon: FolderIcon
                                       forFile:Path
                                       options:0]) {
    NSLog(@"error");
}
我使用的是静态图标,所以我不认为指针可能会悬空,我还检查了是否传递了不存在的文件路径,然后返回“否”。但它并没有崩溃


这很少是可重复生产的。。重新生成后将粘贴错误

您不应该一次从多个线程调用
-setIcon:forFile:options:

发件人:

从应用程序的任何线程调用此方法都是安全的,但是 一次只能从一个线程调用它


控制台日志中还应该写入错误。再加上这个。也就是说,它看起来像一个内存管理错误。您可能传入了指向解除分配对象的悬空指针。请向我们显示您正在使用的导致崩溃的实际代码以及记录器中的任何其他消息。编译时有任何警告吗?另外,请向我们展示创建或获取图像对象的代码。这很可能是您的内存管理错误。尝试切换到现代API以查看是否得到任何不同的结果([NSURL setResourceValue:forKey:error:)