将全局变量快速传递给@IBAction函数?

时间:2015-01-18 20:39:47

标签: swift

我试图允许用户通过单击应用程序菜单栏上的文件来选择要打开的.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按钮和commincate按钮方法可以共享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变量才能在所有三种方法中使用。当我需要这些方法进行通信时,这是必要的,这样我就可以选择用户并将其显示在图像中。感谢您的任何帮助,您可以提供。我认为问题是菜单栏中文件按钮特有的。

有人可以向我解释如何解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

在您的代码中myURL是一个将在app delegate中创建的实例变量。我想知道你是否过分简化了代码示例。

说过它应该可以从app委托的实例方法访问,但是在AppDelegate中而不是在UI代码中使用IBAction方法似乎是一个奇怪的选择(我从来没有尝试过)。