如何更改已弃用的 beginSheetForDirectory 方法

Posted

技术标签:

【中文标题】如何更改已弃用的 beginSheetForDirectory 方法【英文标题】:How to change a deprecated beginSheetForDirectory method 【发布时间】:2012-07-07 15:49:38 【问题描述】:

我有一个使用 beginSheetForDirectory:file:modalForWindow:modalDelegate:didEndSelector:contextInfo: 的应用。

我查看了 Apple 文档,该文档说它已被弃用并改用另一种方法:

将保存面板显示为具有指定路径的工作表,并且, 可选地,该路径中的指定文件。 (在 Mac OS X 中已弃用 v10.6。请改用 beginSheetModalForWindow:completionHandler:。)

我的问题是如何将此代码更改为新代码?

//  [savePanel setRequiredFileType:@"png"];
[savePanel beginSheetForDirectory:nil 
                             file:nil  
                   modalForWindow:[self window] 
                    modalDelegate:self 
                   didEndSelector:@selector(didEndSaveSheet:returnCode:conextInfo:) 
                      contextInfo:NULL];

【问题讨论】:

【参考方案1】:

您正在寻找beginSheetModalForWindow:completionHandler: 方法。

例子:

NSSavePanel *savePanel = [NSSavePanel savePanel];

[savePanel beginSheetModalForWindow:_window completionHandler:^(NSInteger result) 
    if (result == NSFileHandlingPanelOKButton) 
        NSURL *savePath = [[savePanel URLs] objectAtIndex:0];
     else 
        [savePanel close];
    
];

【讨论】:

谢谢安妮,试过了,但是当我在应用程序中测试保存时它只是冻结了所以我想我必须继续玩它直到它工作正常。 好的,我知道为什么它不起作用但不知道该怎么做,之前使用的代码用于从另一个语句中添加的另一个方法中获取 if 条件,是吗是否可以在 if 语句中的旧代码中添加类似 didEndSelector:@selector(didEndSaveSheet:returnCode:conextInfo:) 的内容? [savePanel 关闭];不需要

以上是关于如何更改已弃用的 beginSheetForDirectory 方法的主要内容,如果未能解决你的问题,请参考以下文章

似乎无法关闭 php 中已弃用的错误

如何修复已弃用的“按钮样式”

在 Android 中,如何删除已弃用的通知变量?

如何在不使用已弃用的类的情况下编写 Hadoop map reduce 作业?

我应该如何在 Android 中使用/不使用已弃用的方法

如何正确更新已弃用的 Android BillingFlowParams 方法