- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 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/
AppDelegate 中实现的这段代码有什么问题?警报很快就会出现在窗口上方,然后消失。永远不会调用alertDidEnd回调方法。 我尝试在 Xcode 4.6.1 中清理产品并重建它,但没有成功
当我显示这样的 NSAlert 时,我立即得到响应: int response; NSAlert *alert = [NSAlert alertWithMessageText:... ...]; re
在 Swift 2.0 中,如果我执行以下操作: panel.beginSheetModalForWindow(self.view.window!) { (result) in switch re
我试图在像这样调用时以编程方式关闭模式警报表: [alert beginSheetModalForWindow:contacts modalDelegate:self didEndSelector:@
我的 OS X 应用程序的 ViewController 中有以下代码: NSAlert *alert = [NSAlert new]; alert.messageText = @"Con
我的 OS X 应用程序的 ViewController 中有以下代码: NSAlert *alert = [NSAlert new]; alert.messageText = @"Con
当用户点击默认按钮时,我从下面的警报表代码中收到以下错误: -[NSRectSet objectForKey:]: unrecognized selector sent to instance 0x4
OS X Mavericks 实现了一个新的 API,以便更方便地显示 NSAlert: - (void)beginSheetModalForWindow:(NSWindow *)sheetWindo
我是一名优秀的程序员,十分优秀!