GUIDE でアプリケーションを作成しています。GUIDE が提供する「ハンドル」構造を使用してデータをすばやく格納すると、コードが乱雑で読みにくくなることがわかりました。最良の解決策は、データを処理する独自のクラスを作成し、コールバック関数で使用されるメソッドを格納することであると判断しました。「annotatorGUI_OpeningFcn」(以下を参照) でコンストラクター メソッドを正常に呼び出すことができましたが、別のコールバック関数でクラス メソッドを呼び出すと、クラスへの参照が見つかりません。さらに、「annotatorEngine = ....」という行に黄色の下線が引かれ、「変数に代入された値が使用されていない可能性があります」という文が表示されます。クラス宣言が GUI スクリプト全体に反映されていないようです。「handles」構造の使用や「宣言」は避けたい
編集:これまでのところ、クラスオブジェクトをグローバルとして宣言することだけが機能しているようです。ただし、各コールバックで「global annotatorEngine」を記述する必要があるため、これはまだ少し面倒です。
% --- Executes just before annotatorGUI is made visible.
function annotatorGUI_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to annotatorGUI (see VARARGIN)
% Choose default command line output for annotatorGUI
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% CLASS CONSTRUCTED HERE
annotatorEngine = annotatorGUIClass(handles.rawAxes, handles.psdAxes, handles.allPairsAxes)
% UIWAIT makes annotatorGUI wait for user response (see UIRESUME)
% uiwait(handles.figure1);
メソッドを呼び出す場所。
% --------------------------------------------------------------------
function loadData_Callback(hObject, eventdata, handles)
% hObject handle to loadData (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
[FileName, PathName] = uigetfile('*.mat', 'Select a data file to load');
annotatorEngine.loadData(FileName, PathName)
return