Unable to save/load objects (uitree uitable) created by App designer ? (R2019a)

23 Ansichten (letzte 30 Tage)
Inso
Inso am 19 Okt. 2019
Beantwortet: Inso am 25 Okt. 2019
Hi, I'm using App Designer to build an app with a uitree and a uitable. The tree/table is editable in the app during runtime. I want the edited tree/table to be saved to a local place, and also be able to be loaded in the future. So I created the save/load buttons to save/load the uitree/uitable as the following (Tree as example):
function Button_Save(app, event) % save the app.Tree to TreeSave.mat
ProgramTree=app.Tree;
uisave('ProgramTree','TreeSave')
end
function Button_Load(app, event) % load and assign
ProgramTree= load('TreeSave.mat');
app.Tree=ProgramTree;
end
But there are warning "Unable to save/load the object created by App designer" and error "Invalid data type. The data type must be matlab.ui.container.Tree or can be converted to matlab.ui.container.Tree", and the load function is not working. It seems Matlab has banned the save/load function for objects created by Appdesigner. I'm wondering if there is a way to walk around this, or is there anyway to extract the information of uitree to some other type of file, maybe .xls, for reuse? Thank you for reading.
  3 Kommentare
Adam
Adam am 22 Okt. 2019
Bearbeitet: Adam am 22 Okt. 2019
Saving and loading ui components is generally a bad idea. Try saving the raw data and recreate (or re-fill if it still exists) the component with the loaded raw data instead.
Inso
Inso am 23 Okt. 2019
Thanks. I totally agree with you and I'm trying to write a function to extract the uitree information (treenode relationship and userdata). But I think it'll take me some time to achieve, since the uitree is customized. Is there any existing functions for reference? :)

Melden Sie sich an, um zu kommentieren.

Antworten (1)

Inso
Inso am 25 Okt. 2019
Problem solved. Write down to share.
Basically, my original codes have two malfunctions. One is the usage of 'load':
ProgramTree= load('TreeSave.mat');
After assignment, the 'ProgramTree' becomes a struct that contains the tree, instead of the tree itself. 'ProgramTree.ProgramTree' is the 'real' tree. Thus the tree is not loaded correctly. 'load(filename,variables)' or 'load(filename)' is suggested.
The second problem is the "not supported functionality of saving/loading matlab.Apps.AppBase object" when excecute
app.Tree=ProgramTree;
I found it's not only a warning but also may cause problem in node selection of the loaded tree. So I tried to save the children of the tree instead:
f = app.Tree.Children; % Use a loop and save the Children in a struct, if there is more than one first order child.
save('DeviceSave.mat','f')
Then load the Children and transplant them to the tree, as needed:
delete(app.Tree.Children);
load('DeviceSave.mat','f')
f.Parent=app.Tree;
So far the functions work OK, and there is no warning any more.

Kategorien

Mehr zu Develop Apps Using App Designer finden Sie in Help Center und File Exchange

Produkte


Version

R2019a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by