2015-01-18 3 views
1

Я пытаюсь разрешить пользователю выбирать файл .png для открытия, щелкнув файл в строке меню приложения, а затем открыть файл Microsoft Word таким же образом.Быстрая передача глобальных переменных в функцию @IBAction?

Проблема заключается в том, что кажется, что @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, чтобы иметь возможность использовать во всех трех методов. Это необходимо позже, когда мне нужны эти методы для связи, поэтому я могу выбрать пользователей и отобразить их в изображении. Спасибо за любую помощь, которую вы можете предоставить. Я считаю, что проблема связана с кнопкой файла в строке меню.

Может ли кто-нибудь объяснить мне, как обойти эту проблему?

ответ

0

В вашем коде myURL есть переменная экземпляра, которая будет создана в делегате приложения. Интересно, если вы упростили свой образец кода.

Сказав, что он должен быть доступен из методов экземпляра делегата приложения, но методы IBAction в AppDelegate, а не в коде пользовательского интерфейса, кажутся странным выбором (я никогда не пробовал).

Смежные вопросы