objective-c - 使用应用程序沙箱的 Cocoa 应用程序中的 NSOpenPanel 给出错误

标签 objective-c macos cocoa

我正在我的 Cocoa 应用程序中做一个简单的文件打开面板。我启用了权利和应用程序沙箱,以下代码现在在 setFloatingPanel 上给出了错误。不明白为什么?

NSArray* fileTypes = [[NSArray alloc] initWithObjects:@"png", @"PNG", nil];  
NSOpenPanel *panel;
panel = [NSOpenPanel openPanel];
[panel setTitle:@"Select Photo"];
[panel setFloatingPanel:YES];

导致以下错误

2012-02-14 11:43:45.831 MyApp[451:707] -[NSRemoteOpenPanel setFloatingPanel:]: unrecognized selector sent to instance 0x400886ea0
2012-02-14 11:43:45.832 MyApp[451:707] -[NSRemoteOpenPanel setFloatingPanel:]: unrecognized selector sent to instance 0x400886ea0
2012-02-14 11:43:45.837 MyApp[451:707] (
    0   CoreFoundation                      0x00007fff83b18286 __exceptionPreprocess + 198
    1   libobjc.A.dylib                     0x00007fff8b7f0d5e objc_exception_throw + 43
    2   CoreFoundation                      0x00007fff83ba44ce -[NSObject doesNotRecognizeSelector:] + 190
    3   CoreFoundation                      0x00007fff83b05133 ___forwarding___ + 371
    4   CoreFoundation                      0x00007fff83b04f48 _CF_forwarding_prep_0 + 232
    5   MyApp                               0x0000000100019f77 openFiles + 519
    6   MyApp                               0x0000000100012b19 -[MyController addImageButtonClicked:] + 25
    7   CoreFoundation                      0x00007fff83b07a1d -[NSObject performSelector:withObject:] + 61
    8   AppKit                              0x00007fff878d9710 -[NSApplication sendAction:to:from:] + 139
    9   AppKit                              0x00007fff878d9642 -[NSControl sendAction:to:] + 88
    10  AppKit                              0x00007fff878d956d -[NSCell _sendActionFrom:] + 137
    11  AppKit                              0x00007fff878d8a30 -[NSCell trackMouse:inRect:ofView:untilMouseUp:] + 2014
    12  AppKit                              0x00007fff879588e0 -[NSButtonCell trackMouse:inRect:ofView:untilMouseUp:] + 489
    13  AppKit                              0x00007fff878d763a -[NSControl mouseDown:] + 786
    14  AppKit                              0x00007fff878a20e0 -[NSWindow sendEvent:] + 6306
    15  AppKit                              0x00007fff8783a68f -[NSApplication sendEvent:] + 5593
    16  AppKit                              0x00007fff877d0682 -[NSApplication run] + 555
    17  AppKit                              0x00007fff87a4f80c NSApplicationMain + 867
    18  MyApp                               0x0000000100001f4c main + 44
    19  MyApp                               0x0000000100001f14 start + 52
    20  ???                                 0x0000000000000003 0x0 + 3
)

最佳答案

正如您所提到的,您已启用应用沙箱,这解释了为什么您会看到 NSRemoteOpenPanel在你的崩溃日志中。

显然是苹果的NSRemoteOpenPanel不从 NSOpenPanel 下降或NSSavePanelNSPanel (这是定义 setFloatingPanel 方法的地方)。

我建议在 http://bugreporter.apple.com 提交增强请求(或错误)

苹果也可能不希望沙盒应用程序具有位于“正常”窗口层之外的 float 面板或窗口,在这种情况下,您的错误将很快被关闭或评论。

关于objective-c - 使用应用程序沙箱的 Cocoa 应用程序中的 NSOpenPanel 给出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9272599/

相关文章:

python - 为什么 'pip show' 或 'pip list' 对我不起作用?

swift - 如何使用 Swift 和 MacOS 隐藏顶部栏(带按钮)?

objective-c - 在没有 Nib 的应用程序中跟踪鼠标位置

objective-c - 当需要 float 时传递整数

ios - 酷开 : How to know what functions are provided by a dylib on mac?

ios - 如何使动画 subview 中的按钮在该 subview 移动期间起作用?

objective-c - 我该怎么办 "char *bufferData = new char[charSize];"

ios - Swift:嵌套可选

objective-c - 如何通过NSTask运行 "Purge"命令?

iphone - 如何检测进入 UIButton 框架的触摸?