XML との間で設定を保存および読み取るアプリケーションを開発しています。新しい機能を追加するときはもちろん、これらの機能を構成する機能も追加しますが、まだ存在しない XML から変数を読み取ろうとすると、コードがクラッシュすることがわかりました。これが発生すると、読み取る必要のある後続の変数が読み取られず、設定の一部が失われます。次のコードを例として考えてみましょう。
xmldoc := TXMLDocument.Create(nil);
Try
xmldoc.LoadFromFile('c:\myxml.xml');
xmldoc.Active := True;
if xmldoc.ChildNodes.Count >= 1 then
Begin
Control := Root.ChildNodes.FindNode('Control');
if Assigned(Control) then
Begin
Username.Text := Control.Attributes['Username'];
Password.Text := Control.Attributes['Password'];
AutoValidate.Checked := Control.Attributes['AutoValidate'];
AutoIRC.Checked := Control.Attributes['AutoIRC'];
Passive.Checked := Control.Attributes['Passive'];
DoNothing.Checked := Control.Attributes['DoNothing'];
OpenPage.Checked := Control.Attributes['OpenPage'];
DownloadUsingBrowser.Checked := Control.Attributes['DownloadUsingBrowser'];
RSSFeed.Checked := Control.Attributes['RSSFeed'];
SaveToFolder.Checked := Control.Attributes['SaveToFolder'];
SaveToFTP.Checked := Control.Attributes['SaveToFTP'];
SavePath.Text := Control.Attributes['SavePath'];
FTPPath.Text := Control.Attributes['FTPPath'];
End;
End;
Finally
xmldoc.Active := False;
End;
オプションとして「AutoValidate」を追加したばかりだと仮定します。アプリケーションによってまだ保存されていないため、XML ファイルにはこのプロパティがありませんが、アプリケーションは起動時にこのプロパティを読み取ろうとします (プリファレンスを読み取ります)。
欠落しているプロパティが古き良き「例外クラス EVariantTypeCastError というメッセージを発生させないようにするにはどうすればよいですか 'タイプ (Null) のバリアントをタイプ (Boolean) に変換できませんでした'」