简体   繁体   中英

NSOpenPanel in Cocoa app with app-sandboxing gives an error

I am doing a simple file open panel in my Cocoa app. I enable entitlements and app sandboxing and the following code now gives me an error on setFloatingPanel. Can't figure out why?

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

result in the following error

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
)

As you've mentioned you've enabled app sandboxing, that explains why you're seeing NSRemoteOpenPanel in your crash log.

Apparently Apple's NSRemoteOpenPanel doesn't descend from NSOpenPanel or NSSavePanel or NSPanel (which is where the setFloatingPanel method gets defined).

I'd recommend filing an enhancement request (or bug) at http://bugreporter.apple.com

It also may be that Apple doesn't want sandboxed apps to have floating panels or windows that live outside the "normal" Window layer, in which case your bug will get closed or commented upon really quick.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM