我试图让用户通过单击应用程序菜单栏上的文件来选择要打开的 .png 文件,然后以相同的方式打开 Microsoft Word 文件。
问题是 @IBAction func SelectFileToOpen(sender: NSMenuItem) {}
无法访问全局变量或设置它们,并且似乎完全独立于代码的其余部分
这是我的代码,旨在演示该方法如何无法读取全局变量:
//
// AppDelegate.swift
// Swift class based
//
// Created by ethan sanford on 2015-01-16.
// Copyright (c) 2015 ethan D sanford. All rights reserved.
//
import Cocoa
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
func applicationDidFinishLaunching(aNotification: NSNotification) {
// Insert code here to initialize your application
}
func applicationWillTerminate(aNotification: NSNotification) {
// Insert code here to tear down your application
}
var myURL=NSURL(fileURLWithPath: "")
@IBAction func btnConcat(sender: NSButton) {
myURL = NSURL(fileURLWithPath: "///Users/ethansanford/Desktop/BigWriting.png")
var say_something = "set URL button clicked"
print(say_something);
print(myURL)
}
@IBAction func SelectFileToOpen(sender: NSMenuItem) {
var say_something = "Menu bar, file-open clicked:"
print(say_something);
print(myURL);
}
@IBAction func communicate(sender: AnyObject) {
var say_something = "communicate button clicked:"
print(say_something);
print(myURL);
}
}
这是从这段代码生成的 NSlog
。请注意,URL 按钮和通信按钮方法可以共享 myURL 变量,但文件打开按钮似乎无法:
URL button clickedOptional(file://///Users/ethansanford/Desktop/BigWriting.png)
communicate button clicked:Optional(file://///Users/ethansanford/Desktop/BigWriting.png)Menu bar
file-open clicked:nil
communicate button clicked:Optional(file://///Users/ethansanford/Desktop/BigWriting.png)
我需要 myURL
变量才能在所有三种方法中使用。这对于以后我需要这些方法进行通信时是必需的,这样我就可以接受用户的选择并将其很好地显示在图像中。感谢您的任何帮助,您可以提供。我相信问题出在菜单栏中的文件按钮上。
任何人都可以向我解释如何解决这个问题吗?
最佳答案
在您的代码中,myURL
是将在应用委托(delegate)中创建的实例变量。我想知道您是否过度简化了代码示例。
虽然说过它应该可以从应用程序委托(delegate)的实例方法访问,但是在 AppDelegate 中而不是在 UI 代码中使用 IBAction 方法似乎是一个奇怪的选择(我从未尝试过)。
关于Swift 将全局变量传递给@IBAction 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28014589/