2014-05-20 16 views
5

Sono nel Generatore di interfacce di Xcode, creando un'azione di automazione personalizzata Cocoa-Applescript. Ho un pulsante e un menu di ComboBox nell'interfaccia. Mi piacerebbe riempire i valori del contenuto del menu di ComboBox quando l'utente fa clic sul pulsante. Ho creato il gestoreCome connettere l'azione inviata di un pulsante in Xcode per un progetto di azione Automator personalizzato

on buttonSentAction_(sender) 
    -- set popupMenuContentValues of my parameters() to aList as list 
    my popupMenu's addItemsWithObjectValues_(aList) 
end buttonSentAction_ 

nel file AppleScript, ma quando ho CTRL trascinare dal pulsante al proprietario del file, il proprietario del file non evidenzia per me, per interrompere la connessione. Quello che mi aspetto è che si liberi e mi dà la possibilità di scegliere il gestore di ButtonSentAction_ per ricevere l'azione inviata. Se faccio clic con il pulsante destro del mouse su File Owner, il gestore di azioni ricevuto che ho creato nel file del controller Applescript non viene visualizzato. (Nota, io sono ancora incerti circa la linea corretta per popolare il menu ComboBox dentro tale gestore, anche.) Screen Grab of linking combobox to File's Owner

posso vedere nel "FM alle caselle di testo denominato" progetto di esempio Automator azione a macosxautomation.com ha un pulsante nell'IB dove puoi vedere nell'Ispettore Bindings che l'azione inviata dal pulsante è in effetti connessa al proprietario del file e che il file applescript ha quel gestore corrispondente. Inoltre, il controller per il proprietario del file è impostato di default sul file applescript. Mi manca qualcosa di specifico sul collegamento delle azioni inviate in un progetto di azione di Automator, ovviamente. Qualsiasi aiuto?

+0

Ci sono un paio di domande simili su StackOverflow, dove la gente non è in grado di connettersi al proprietario del file, ma non erano i progetti di azione di Automator. – jweaks

risposta

1

Aggiornamento: Ho preso a lavorare. La chiave era che devi creare un punto vendita per l'oggetto prima di poterlo associare a un gestore di azioni sentite.

Ho eliminato il pulsante e ricominciato, con un nuovo schema di denominazione. Questa volta, il proprietario del file ha ricevuto il trascinamento e tutto è connesso all'azione inviata e funziona come previsto.Ho fatto le cose esattamente come prima, quindi è un mistero il motivo per cui il primo gestore di azioni non ha potuto ricevere l'azione inviata in IB.

Codice Esempio:

on searchTypeMatrixWasClicked_(sender) 
    -- called with the matrix sent action 
    set theIndex to (actionTypeIndex of my parameters()) as integer 
    if theIndex is 0 then 
    -- do stuff, etc. 
    else if theIndex is 1 … 
    end if 
end 

Bindings Inspector in IB

+0

Potresti elaborare, magari inserire un codice di esempio ... –

+1

Certo, hai appena aggiunto il codice del gestore eventi pertinente e una schermata dell'Ispettore dei binding. – jweaks

-1

Non ho lavorato con progetti di Automator per collegare le azioni per oggetti personalizzati in Interface Builder si sia:

  • Impostare l'oggetto esistente come il proprietario di instantiateWithOwner:topLevelObjects:. Quindi imposta la classe di conseguenza nel file Nib.

  • Crea un'istanza di un nuovo oggetto personalizzato trascinando un oggetto NSO sul pennino, verrà visualizzato sotto l'oggetto "Parametri" nell'immagine. Quindi imposta la sua classe su qualsiasi oggetto che vuoi istanziare da IB. Si dovrebbe anche conservare questo oggetto con un Outlet.

+0

Grazie per gli sforzi, ma non credo che questa risposta abbia un senso per un progetto di azione di Applescript Automator. Il proprietario del file dovrebbe puntare all'istanza del file proprietario. – jweaks

0

Forse questo ti aiuterà.

So che non funziona con il controllo + trascinamento per il proprietario del file per qualche motivo, ma è possibile connettersi al proprietario del file andando alla finestra di ispezione dei bind.

Questo non è esattamente quello che stai facendo, perché vuoi inviare informazioni a un gestore, ma penso che il trucco sia usare l'Oggetto Parametri. Devi creare una chiave per contenere il valore e accedervi con AppleScript usando get |keyname| of my parameters() as integer, (o stringa, lista) per esempio. vedi The Structure of the on run Command Handler.

Di seguito viene fornito un esempio di come ho collegato una proprietà a un pulsante popup.

vedere le immagini: enter image description here enter image description here

+0

Si sta descrivendo come impostare un binding, con il quale non ho alcun problema. La mia domanda è chiedere come collegare il proprietario del file a un'azione inviata, che non è la stessa cosa di un legame con un valore come si dimostra. – jweaks

+0

@jweaks Vedo quello che stai dicendo. Sono interessato a scoprire anche questo. Sperimenterò un po '. –

+0

Ho appena ripreso tutti i passaggi, e questa volta ha funzionato. Grande mistero. – jweaks