我正在尝试将字符串(文件位置)从 App Designer 传输到 .m 脚本文件。
到目前为止,在应用程序设计器中我有:
app.matfile = app.matfileEditField.Value;
app.directory = app.DirectoryEditField.Value;
app.DataSetName = app.DataSetNameEditField.Value;
assignin('base','matfileDirectory',app.matfile);
assignin('base','directory',app.directory);
assignin('base','DataSetName',app.DataSetName);
run('PostProcessMAIN.m');
其中所有的app.***都是公共变量。当我运行应用程序时,.m 文件正确加载三个变量。当我进入命令行窗口并测试时,字符串是正确的。我还在命令窗口中尝试了 cd(directory) 来检查以确保它有效并且确实有效(cd 将您置于正确的文件路径中)。但是,当 .m 文件自行运行时,我收到错误。我收到以下错误:
Unrecognized function or variable 'directory'.
Error in PostProcessMAIN (line 10)
cd(directory);
Error in run (line 91)
evalin('caller', strcat(script, ';'));
Error in PDFscanner/PostProcessData (line 116)
run('PostProcessMAIN.m');
错误
matlab.apps.AppBase>@(source,event)executeCallback(appdesigner.internal.service.AppManagementService.instance(),app,callback,requiresEventData,event) (line 63)
newCallback = @(source, event)executeCallback(appdesigner.internal.service.AppManagementService.instance(), ...
Error while evaluating Button PrivateButtonPushedFcn.
它无法识别我分配的变量,并且由于某种原因可以在命令行窗口中使用。有人可以帮我吗?
谢谢您的帮助!对于遇到同样问题的人,解决方案如下:
确保您的变量是公共的:
属性(访问=公共)
目录='';
数据集名称 = '';
matfile = '';
结束
从应用程序的文本框中分配应用程序变量名称。然后将变量分配给“调用者”工作区中的 .m 文件:
app.matfile = app.matfileEditField.Value;
app.directory = app.DirectoryEditField.Value;
app.DataSetName = app.DataSetNameEditField.Value;
assignin('caller','matfileDirectory',app.matfile);
assignin('caller','directory',app.directory);
assignin('caller','DataSetName',app.DataSetName);
evalin('caller','PostProcessMAIN');
注意:.m 文件是 PostProcessMAIN.m。但是,如果您将 .m 放在脚本行中,它将无法识别该文件。
注意:确保 .m 文件开头没有“clear”。这将清除您刚刚分配的所有变量,并且您将产生一个错误,指出您尝试使用的变量未定义。