gpt4 book ai didi

cocoa - 从beginSheetModalForWindow获取URL :

转载 作者:行者123 更新时间:2023-12-03 16:13:22 25 4
gpt4 key购买 nike

我正在使用 OpenPanel 来获取文件路径 URL。这有效:

[oPanel beginSheetModalForWindow:theWindow completionHandler:^(NSInteger returnCode)
{
NSURL *pathToFile = nil;

if (returnCode == NSOKButton)
pathToFile = [[oPanel URLs] objectAtIndex:0];
}];

这不会导致“只读变量分配”错误:

NSURL *pathToFile = nil;
[oPanel beginSheetModalForWindow:theWindow completionHandler:^(NSInteger returnCode)
{
if (returnCode == NSOKButton)
pathToFile = [[oPanel URLs] objectAtIndex:0];
}];
return pathToFile;

一般来说,任何从 oPanel 上下文中提取 pathToFile 的尝试都会失败。对于小情况来说,这并不是什么大问题,但随着代码的增长,我被迫将所有内容(XML 解析、核心数据等)填充到不适当的区域内。我该怎么做才能提取pathToFile?

谢谢。

最佳答案

This doesn't, resulting in an 'assignment of read-only variable' error:

NSURL *pathToFile = nil;
[oPanel beginSheetModalForWindow:theWindow completionHandler:^(NSInteger returnCode)
{
if (returnCode == NSOKButton)
pathToFile = [[oPanel URLs] objectAtIndex:0];
}];
return pathToFile;

是的,因为您试图分配给创建 block 时创建的 pathToFile 变量的副本。您没有分配给在 block 外部声明的原始 pathToFile 变量。

您可以使用the __block keyword让 block 分配给这个变量,但我认为这不会有帮助,因为 beginSheetModalForWindow:completionHandler: 不会阻塞。 (文档没有提到这一点,但该方法没有理由被阻止,您可以通过日志记录来验证它是否没有被阻止。)该消息立即返回,而面板仍在运行。

因此,您尝试将完成处理程序 block 分配给局部变量,但是声明局部变量的方法可能会在 block 运行时返回,因此它将无法使用 block left 将留在变量中的值。

无论您对 pathToFile 做什么,都应该在 block 本身中,或者在 block 可以调用的方法中(采用 NSURL * 参数)。

关于cocoa - 从beginSheetModalForWindow获取URL :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2182092/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com