Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 显示NSOpenPanel时设置AllowedFileTypes_Cocoa_Nsopenpanel - Fatal编程技术网

Cocoa 显示NSOpenPanel时设置AllowedFileTypes

Cocoa 显示NSOpenPanel时设置AllowedFileTypes,cocoa,nsopenpanel,Cocoa,Nsopenpanel,我有一个带有附件视图的NSOpenPanel。附件视图很简单-它是一个复选框,当选中时,允许用户选择任何文件;取消选中时,要求文件位于支持的扩展名列表中 NSOpenPanel初始化和显示: NSOpenPanel* dialog = [NSOpenPanel openPanel]; [dialog setAllowedFileTypes:allowedFileTypes]; [dialog setAccessoryView:openPanelAccessoryView]; openPane

我有一个带有附件视图的
NSOpenPanel
。附件视图很简单-它是一个复选框,当选中时,允许用户选择任何文件;取消选中时,要求文件位于支持的扩展名列表中

NSOpenPanel
初始化和显示:

NSOpenPanel* dialog = [NSOpenPanel openPanel];

[dialog setAllowedFileTypes:allowedFileTypes];
[dialog setAccessoryView:openPanelAccessoryView];

openPanel = dialog;

[dialog beginSheetModalForWindow:[self activeWindow]
               completionHandler:^(NSInteger result)
 {
     ...
 }];
iAction
复选框:

- (void)openUnrecognizedFiles:(id)sender
{
    if ([sender state])
        [openPanel setAllowedFileTypes:nil];
    else
        [openPanel setAllowedFileTypes:@[@"dsk"]];
}
根据,可以在显示面板时使用
setAllowedFileTypes

可以在面板运行时更改允许的文件类型(对于 例如,从附件视图)

然而,这似乎并没有像预期的那样工作:当前视图不会重新加载-当您滚动时,更向下的文件会根据新设置的需要被启用/禁用;但是,最初可见的文件不受影响

当用户切换附件视图复选框时,我需要一些方法来刷新当前目录的内容-但是,我似乎找不到任何方法来做到这一点。有什么建议吗


编辑,2013年10月15日:这似乎是由Mavericks中的一个bug引起的,而不是其他任何东西。在Mountain Lion上运行的同一代码没有任何问题,正如这里的两位评论员所指出的那样。

我已经尝试过这样做,并且成功了:

NSOpenPanel* dialog = [NSOpenPanel openPanel];

    [dialog setAllowedFileTypes:[NSArray arrayWithObject:@"png"]];

    NSButton *openPanelAccessoryView = [[[NSButton alloc] initWithFrame:NSMakeRect(0.0, 0.0, 324.0, 22.0)] autorelease];

    [openPanelAccessoryView setButtonType:NSSwitchButton];

    [openPanelAccessoryView setBezelStyle:0];

    [openPanelAccessoryView setAction:@selector(openUnrecognizedFiles:)];

    [openPanelAccessoryView setTarget:self];

    [dialog setAccessoryView:openPanelAccessoryView];

     openPanel = dialog;

    [dialog beginSheetModalForWindow:[[self view] window] completionHandler:^(NSInteger result){
        if(result == NSFileHandlingPanelOKButton)
        {

        }
    } ];
这与您的操作相同:

- (void)openUnrecognizedFiles:(id)sender

{
     if ([sender state])
      [openPanel setAllowedFileTypes:nil];
     else
      [openPanel setAllowedFileTypes:[NSArray arrayWithObject:@"jpeg"]];
}

现在,文件类型正在根据复选框的打开和关闭进行更改。

您不能使用
setAllowedFileTypes:
方法隐藏文件。此方法将仅启用/禁用“打开”面板中的文件

NSSavePanel.h

此属性将确定应在打开状态下启用哪些文件 面板


我对隐藏文件不感兴趣;我对启用/禁用它们感兴趣。(s)他希望在显示面板时启用/禁用文件。显示面板时,设置allowedFileTypes没有直接的明显效果。tableview必须重新加载其数据。所以不,它不起作用。仅当在显示面板之前设置AllowedFileType时,它才起作用。在我的案例中,文件类型也会更改。当您选中/取消选中该框时,文件是否变为启用/禁用?这就是问题所在-当我切换复选框时,视图不会更新。仔细想想,不要紧-我看到的可能是由于Mavericks GM中的错误(请参见编辑我的问题)。