2013-08-20 102 views
2

我有一段代碼,其中我使用setappdata,後來我使用getappdata調用數據,它返回一個空的matirx,即使它不是空的。我的簡化代碼段是如下:getappdata在MATLAB中返回空矩陣

function edit1_Callback(hObject, eventdata, handles) 

C=str2double(get(hObject,'String')) 
setappdata(hObject,'H',C) 

% --- Executes during object creation, after setting all properties. 
function edit1_CreateFcn(hObject, eventdata, handles) 

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) 
    set(hObject,'BackgroundColor','white'); 
end 


% --- Executes on button press in pushbutton1. 
function pushbutton1_Callback(hObject, eventdata, handles) 

N=getappdata(hObject,'H') 

當我運行代碼,我輸入一個值到editbox然後推動pushbutton,我得到下面的輸出

C = 

    5 


N = 

    [] 

我想以下輸出

C = 

    5 


N = 

    5 

我要解釋一下,我使用getappdatasetappdata因爲我想通過不同數據之間ent GUI,我在做這個時遇到了空矩陣問題。所以這是我最終目標的一個非常簡單的問題。我還閱讀了很多不同的文章和關於這個問題和命令的信息,包括數學工作站,但是我對這個問題很迷茫。

回答

3

首先,讓我們來解釋一下發生了什麼。您正在申請setappdatahObject。此時hObjectedit1,該編輯框,和你的應用數據值H設置爲5

然後你打電話內pushbutton1_Callbackgetappdata。此時hObject指的是pushbutton1,並且您將獲得其應用數據值H,該數據從未設置,因此您將獲得[]

以前的答案建議您在根對象0上使用setappdatagetappdata。這可行,但它與使用全局變量BAD基本相同。相反,我建議你最可能要確保你正在設置並獲取正確的應用程序數據。在edit1_Callback,嘗試:

setappdata(handles.edit1,'H',C) 

和內pushbutton1_Callback,嘗試:

N=getappdata(handles.edit1, 'H') 

我認爲應該工作(它假定編輯框實際上是所謂edit1,我認爲這是有可能給你Guide - 生成的代碼,但改變,如果你已經調用了其他東西)。

+1

我想使用'0'的美妙之處在於,我可以通過使用不同名稱從一個句柄訪問所有變量。但我選擇不使用全局變量是有原因的,所以我認爲Sam給出的這個答案對我來說更合適。謝謝 – user2519890

+0

如果你喜歡,如果沒有真正的全局變量,你可以得到一種半途而廢的方法,把所有內容都存儲在GUI主圖形的'appdata'中(如果你有多個窗口,選擇一個永遠存在的命令申請時間)。那麼這些數據將是'GUI的全局',但實際上並不是全局的。如果你發現傳遞一個GUI圖形的句柄是一件麻煩事。給它的'Tag'屬性分配一些獨特的東西,然後用'h = findobj('Tag','something')'在任何你喜歡的地方檢索它的句柄。 –

+0

當我嘗試在GUI之間傳遞數據時使用'handles.edit1'而不是'0',我實際上遇到了一個問題,當它使用'0'時它工作正常,但是使用'handles.edit1'或'handles. * appropiateTag *我得到'參考不存在的'錯誤 – user2519890

2

您可以使用0而不是hObject。它會在根工作區中讀取/寫入變量H.

setappdata(0,'H',C); 
getappdata(0,'H'); 
+0

非常感謝,它效果很好 – user2519890

+0

這會起作用,但基本上與使用全局變量相同,這在一般情況下是一個壞主意。請參閱下面的答案以獲取其他建議。 –

+0

感謝您的額外信息@SamRoberts,您的建議已被採納無聊,非常感謝。但是再次感謝Magla這個解決方案確實有效。 – user2519890