<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Chris Danielson&#039;s Blog &#187; Apple</title>
	<atom:link href="http://www.chrisdanielson.com/tag/apple/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.chrisdanielson.com</link>
	<description>Trials and Tribulations of a Software Developer</description>
	<lastBuildDate>Wed, 14 Sep 2011 00:00:51 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Using Apple Property List Files with Unity3D</title>
		<link>http://www.chrisdanielson.com/2011/05/09/using-apple-property-list-files-with-unity3d/</link>
		<comments>http://www.chrisdanielson.com/2011/05/09/using-apple-property-list-files-with-unity3d/#comments</comments>
		<pubDate>Mon, 09 May 2011 15:01:14 +0000</pubDate>
		<dc:creator>Chris Danielson</dc:creator>
				<category><![CDATA[Unity3D]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[C Sharp]]></category>
		<category><![CDATA[persistent storage]]></category>
		<category><![CDATA[plist]]></category>
		<category><![CDATA[Property List]]></category>
		<category><![CDATA[sqlite]]></category>

		<guid isPermaLink="false">http://www.chrisdanielson.com/?p=505</guid>
		<description><![CDATA[Unity3D C-Sharp PList load and save tool.  Code included in this post.]]></description>
			<content:encoded><![CDATA[<p>Persistent storage and data retrieval can be troubling without a reference in your environment to the SQLite library.  In the case of Unity3D, there is no direct SQLite library wrappers offered out of the box.  One can write a device specific SQLite wrapper (or purchase one) that bridges the gap into the Unity3D JavaScript and CSharp world or one can decide on a simpler method for storing and managing data.  Enter Apple&#8217;s .plist or property list files.  These files can be saved in binary and also in a standard text format.  For our situation, we&#8217;re going to manage these files that are stored in standard text format.  It is arguable that using a custom plist parser is going to be slower than using SQLite, but with a small enough subset of data I believe that plist should be an adequate solution.</p>
<p>The unity community has a free version of a <a href="http://www.unifycommunity.com/wiki/index.php?title=PropertyListSerializer">PropertyListSerializer.js</a> file.  I copied this code outright and converted it into the strongly typed C-Sharp environment.  My reasoning was simple, I found that using JavaScript wasn&#8217;t going to work with my current project for a few reasons so I decided to convert this file over into C-Sharp code.  I did attempt to upload my changes to that site, but it continued to complain that I was getting blocked by the spam check functions.</p>
<p>Enjoy!</p>
<p>Edit: May 13, 2011  After testing on the actual iOS device I discovered that DTD validation is not implemented in Unity.  I&#8217;ve now disabled the XmlDocument forced validation.</p>

<div class="wp_codebox_msgheader"><span class="right"></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p505code1'); return false;">View Code</a> CSHARP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p5051"><td class="code" id="p505code1"><pre class="csharp" style="font-family:monospace;"><span style="color: #008080; font-style: italic;">/**
 * 
 * Converted By: Chris Danielson of http://MonkeyPrism.com
 * Converted Date: May 8, 2011
 * Original JavaScript Auther: capnbishop
 * 
 * Conversion of a Unity 3D Community script from JavaScript to type controlled C# Mono.Net.
 * 
 * Please note, that the original object was named PropertyListSerializer.  I renamed it to prevent any conflicts with the original script.
 * 
 * The PropertyListSerializer.js (CD: renamed now to PListManager) script is used to load and save an XML property list file to and from a hierarchical hashtable 
 * (in which the root hashtable can contain child hashtables and arrays). This can provide a convenient and dynamic means of serializing 
 * a complex hierarchy of game data into XML files.
 * When loading, the resulting hashtable can include 8 different types of values: string, integer, real, date, data, boolean, dictionary, and array. 
 * Data elements are loaded as strings. Dictionaries are loaded as hashtables. Arrays are loaded as arrays. Each value is loaded with an 
 * associating key, except for elements of an array. Thus, each child hashtable and array also have associating keys, and can be combined to 
 * create a complex hierarchy of key value pairs and arrays.
 * When saving, the resulting XML file will contain the same hierarchy of data. All data will end up being stored as a string, but with an 
 * associated value type. Strings, integers, and decimals values are stored as such. Dates are stored in ISO 8601 format. Hashtables are stored 
 * as a plist key/value dictionary, and arrays as a series of keyless values.
 * The loader passes a lot of values by reference, and performs a considerable amount of recursion. Primitive values had to be passed by reference. 
 * Unity's JavaScript only passes objects by reference, and cannot explicitly pass a primitive by reference. As such, we've had to create a 
 * special ValueObject, which is just an abstract object that holds a single value. This object is then passed by reference, and the primitive 
 * value is set to its val property.
 * This plist loader conforms to Apple's plist DOCTYPE definition: http://www.apple.com/DTDs/PropertyList-1.0.dtd
 * 
 * Original JavaScript URL:  http://www.unifycommunity.com/wiki/index.php?title=PropertyListSerializer
 * 
 * Example Saving:
&nbsp;
 		Hashtable playerData = new Hashtable();
		playerData.Add(&quot;Health&quot;,100);
		playerData.Add(&quot;TestObject&quot;, 1.5f);
		ArrayList guns = new ArrayList();
		guns.Add(&quot;AK-47&quot;);
		guns.Add(&quot;Pistol&quot;);
	    playerData.Add(&quot;Guns&quot;, guns);
		Hashtable grenades = new Hashtable();
		grenades.Add(&quot;FragmentationCount&quot;, 1);
		grenades.Add(&quot;IncendiaryCount&quot;, 1);
		playerData.Add(&quot;Grenades&quot;, grenades);
&nbsp;
		//save outside the current project (same folder as Assets and Library)
		String xmlFile = Application.dataPath + &quot;/../ExampleSaveFile.plist&quot;; 
		PListManager.SavePlistToFile(xmlFile, playerData);
 * 
 */</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Collections</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.IO</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Xml</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Text</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Globalization</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">UnityEngine</span><span style="color: #008000;">;</span>
&nbsp;
<span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">class</span> PListManager <span style="color: #008000;">&#123;</span>
&nbsp;
	<span style="color: #0600FF; font-weight: bold;">public</span> PListManager<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> <span style="color: #008000;">&#125;</span>
&nbsp;
	<span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #0600FF; font-weight: bold;">const</span> <span style="color: #6666cc; font-weight: bold;">string</span> SUPPORTED_VERSION <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;1.0&quot;</span><span style="color: #008000;">;</span>
&nbsp;
	<span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #6666cc; font-weight: bold;">bool</span> ParsePListFile<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">string</span> xmlFile, <span style="color: #0600FF; font-weight: bold;">ref</span> Hashtable plist<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>                       
		<span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">!</span>File<span style="color: #008000;">.</span><span style="color: #0000FF;">Exists</span><span style="color: #008000;">&#40;</span>xmlFile<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> 
			Debug<span style="color: #008000;">.</span><span style="color: #0000FF;">LogError</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;File doesn't exist: &quot;</span> <span style="color: #008000;">+</span> xmlFile<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span> 
			<span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #0600FF; font-weight: bold;">false</span><span style="color: #008000;">;</span> 
		<span style="color: #008000;">&#125;</span>
&nbsp;
		StreamReader sr <span style="color: #008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> StreamReader<span style="color: #008000;">&#40;</span>xmlFile<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
		<span style="color: #6666cc; font-weight: bold;">string</span> txt <span style="color: #008000;">=</span> sr<span style="color: #008000;">.</span><span style="color: #0000FF;">ReadToEnd</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
		sr<span style="color: #008000;">.</span><span style="color: #0000FF;">Close</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
		XmlDocument xml <span style="color: #008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> XmlDocument<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
                xml<span style="color: #008000;">.</span><span style="color: #0000FF;">XmlResolver</span> <span style="color: #008000;">=</span> <span style="color: #0600FF; font-weight: bold;">null</span><span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">//Disable schema/DTD validation, it's not implemented for Unity.</span>
		xml<span style="color: #008000;">.</span><span style="color: #0000FF;">LoadXml</span><span style="color: #008000;">&#40;</span>txt<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
		XmlNode plistNode <span style="color: #008000;">=</span> xml<span style="color: #008000;">.</span><span style="color: #0000FF;">LastChild</span><span style="color: #008000;">;</span>
		<span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">!</span>plistNode<span style="color: #008000;">.</span><span style="color: #0000FF;">Name</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Equals</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;plist&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> 
			Debug<span style="color: #008000;">.</span><span style="color: #0000FF;">LogError</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;plist file missing &lt;plist&gt; nodes.&quot;</span> <span style="color: #008000;">+</span> xmlFile<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
			<span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #0600FF; font-weight: bold;">false</span><span style="color: #008000;">;</span>
		<span style="color: #008000;">&#125;</span>
&nbsp;
		<span style="color: #6666cc; font-weight: bold;">string</span> plistVers <span style="color: #008000;">=</span> plistNode<span style="color: #008000;">.</span><span style="color: #0000FF;">Attributes</span><span style="color: #008000;">&#91;</span><span style="color: #666666;">&quot;version&quot;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Value</span><span style="color: #008000;">;</span>
		<span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>plistVers <span style="color: #008000;">==</span> <span style="color: #0600FF; font-weight: bold;">null</span> <span style="color: #008000;">||</span> <span style="color: #008000;">!</span>plistVers<span style="color: #008000;">.</span><span style="color: #0000FF;">Equals</span><span style="color: #008000;">&#40;</span>SUPPORTED_VERSION<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> 
			Debug<span style="color: #008000;">.</span><span style="color: #0000FF;">LogError</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;This is an unsupported plist version: &quot;</span> <span style="color: #008000;">+</span> plistVers <span style="color: #008000;">+</span> <span style="color: #666666;">&quot;. Required version:a &quot;</span> <span style="color: #008000;">+</span> SUPPORTED_VERSION<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span> 
			<span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #0600FF; font-weight: bold;">false</span><span style="color: #008000;">;</span>
		<span style="color: #008000;">&#125;</span>
&nbsp;
		XmlNode dictNode <span style="color: #008000;">=</span> plistNode<span style="color: #008000;">.</span><span style="color: #0000FF;">FirstChild</span><span style="color: #008000;">;</span>
    	<span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">!</span>dictNode<span style="color: #008000;">.</span><span style="color: #0000FF;">Name</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Equals</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;dict&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> 
			Debug<span style="color: #008000;">.</span><span style="color: #0000FF;">LogError</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Missing root dict from plist file: &quot;</span> <span style="color: #008000;">+</span> xmlFile<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span> 
			<span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #0600FF; font-weight: bold;">false</span><span style="color: #008000;">;</span> 
		<span style="color: #008000;">&#125;</span>
&nbsp;
		<span style="color: #0600FF; font-weight: bold;">return</span> LoadDictFromPlistNode<span style="color: #008000;">&#40;</span>dictNode, <span style="color: #0600FF; font-weight: bold;">ref</span> plist<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
&nbsp;
	<span style="color: #008080;">#region LOAD_PLIST_PRIVATE_METHODS</span>
	<span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #6666cc; font-weight: bold;">bool</span> LoadDictFromPlistNode<span style="color: #008000;">&#40;</span>XmlNode node, <span style="color: #0600FF; font-weight: bold;">ref</span> Hashtable dict<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
		<span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>node <span style="color: #008000;">==</span> <span style="color: #0600FF; font-weight: bold;">null</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> 
			Debug<span style="color: #008000;">.</span><span style="color: #0000FF;">LogError</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Attempted to load a null plist dict node.&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
			<span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #0600FF; font-weight: bold;">false</span><span style="color: #008000;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">!</span>node<span style="color: #008000;">.</span><span style="color: #0000FF;">Name</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Equals</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;dict&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> 
			Debug<span style="color: #008000;">.</span><span style="color: #0000FF;">LogError</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Attempted to load an dict from a non-array node type: &quot;</span> <span style="color: #008000;">+</span> node <span style="color: #008000;">+</span> <span style="color: #666666;">&quot;, &quot;</span> <span style="color: #008000;">+</span> node<span style="color: #008000;">.</span><span style="color: #0000FF;">Name</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span> 
			<span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #0600FF; font-weight: bold;">false</span><span style="color: #008000;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>dict <span style="color: #008000;">==</span> <span style="color: #0600FF; font-weight: bold;">null</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> 
			dict <span style="color: #008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> Hashtable<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
		<span style="color: #008000;">&#125;</span>
&nbsp;
		<span style="color: #6666cc; font-weight: bold;">int</span> cnodeCount <span style="color: #008000;">=</span> node<span style="color: #008000;">.</span><span style="color: #0000FF;">ChildNodes</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Count</span><span style="color: #008000;">;</span>
		<span style="color: #0600FF; font-weight: bold;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">int</span> i <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span> i<span style="color: #008000;">+</span><span style="color: #FF0000;">1</span> <span style="color: #008000;">&lt;</span> cnodeCount<span style="color: #008000;">;</span> i<span style="color: #008000;">+=</span><span style="color: #FF0000;">2</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
        	<span style="color: #008080; font-style: italic;">// Select the key and value child nodes</span>
			XmlNode keynode <span style="color: #008000;">=</span> node<span style="color: #008000;">.</span><span style="color: #0000FF;">ChildNodes</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Item</span><span style="color: #008000;">&#40;</span>i<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
			XmlNode valuenode <span style="color: #008000;">=</span> node<span style="color: #008000;">.</span><span style="color: #0000FF;">ChildNodes</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Item</span><span style="color: #008000;">&#40;</span>i<span style="color: #008000;">+</span><span style="color: #FF0000;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
			<span style="color: #008080; font-style: italic;">// If this node isn't a 'key'</span>
        	<span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>keynode<span style="color: #008000;">.</span><span style="color: #0000FF;">Name</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Equals</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;key&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
				<span style="color: #008080; font-style: italic;">// Establish our variables to hold the key and value.</span>
				<span style="color: #6666cc; font-weight: bold;">string</span> key <span style="color: #008000;">=</span> keynode<span style="color: #008000;">.</span><span style="color: #0000FF;">InnerText</span><span style="color: #008000;">;</span>
				ValueObject value <span style="color: #008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> ValueObject<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
	            <span style="color: #008080; font-style: italic;">// Load the value node.</span>
	            <span style="color: #008080; font-style: italic;">// If the value node loaded successfully, add the key/value pair to the dict hashtable.</span>
	            <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>LoadValueFromPlistNode<span style="color: #008000;">&#40;</span>valuenode, <span style="color: #0600FF; font-weight: bold;">ref</span> value<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	                <span style="color: #008080; font-style: italic;">// This could be one of several different possible data types, including another dict.</span>
	                <span style="color: #008080; font-style: italic;">// AddKeyValueToDict() handles this by replacing existing key values that overlap, and doing so recursively for dict values.</span>
	                <span style="color: #008080; font-style: italic;">// If this not successful, post a message stating so and return false.</span>
	                <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">!</span>AddKeyValueToDict<span style="color: #008000;">&#40;</span><span style="color: #0600FF; font-weight: bold;">ref</span> dict, key, value<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
						Debug<span style="color: #008000;">.</span><span style="color: #0000FF;">LogError</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Failed to add key value to dict when loading plist from dict&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span> 
						<span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #0600FF; font-weight: bold;">false</span><span style="color: #008000;">;</span>
					<span style="color: #008000;">&#125;</span>
	            <span style="color: #008000;">&#125;</span> <span style="color: #0600FF; font-weight: bold;">else</span> <span style="color: #008000;">&#123;</span> 
					Debug<span style="color: #008000;">.</span><span style="color: #0000FF;">LogError</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Did not load plist value correctly for key in node: &quot;</span> <span style="color: #008000;">+</span> key <span style="color: #008000;">+</span> <span style="color: #666666;">&quot;, &quot;</span> <span style="color: #008000;">+</span> node<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
					<span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #0600FF; font-weight: bold;">false</span><span style="color: #008000;">;</span>
				<span style="color: #008000;">&#125;</span>
	        <span style="color: #008000;">&#125;</span> <span style="color: #0600FF; font-weight: bold;">else</span> <span style="color: #008000;">&#123;</span> 
				Debug<span style="color: #008000;">.</span><span style="color: #0000FF;">LogError</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;The plist being loaded may be corrupt.&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
				<span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #0600FF; font-weight: bold;">false</span><span style="color: #008000;">;</span>
			<span style="color: #008000;">&#125;</span>
&nbsp;
		<span style="color: #008000;">&#125;</span> <span style="color: #008080; font-style: italic;">//end for</span>
&nbsp;
		<span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #0600FF; font-weight: bold;">true</span><span style="color: #008000;">;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
	<span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #6666cc; font-weight: bold;">bool</span> LoadValueFromPlistNode<span style="color: #008000;">&#40;</span>XmlNode node, <span style="color: #0600FF; font-weight: bold;">ref</span> ValueObject value<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
		<span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>node <span style="color: #008000;">==</span> <span style="color: #0600FF; font-weight: bold;">null</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> 
			Debug<span style="color: #008000;">.</span><span style="color: #0000FF;">LogError</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Attempted to load a null plist value node.&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span> 
			<span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #0600FF; font-weight: bold;">false</span><span style="color: #008000;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>node<span style="color: #008000;">.</span><span style="color: #0000FF;">Name</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Equals</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;string&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> value<span style="color: #008000;">.</span><span style="color: #0000FF;">val</span> <span style="color: #008000;">=</span> node<span style="color: #008000;">.</span><span style="color: #0000FF;">InnerText</span><span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span>
	    <span style="color: #0600FF; font-weight: bold;">else</span> <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>node<span style="color: #008000;">.</span><span style="color: #0000FF;">Name</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Equals</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;integer&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> value<span style="color: #008000;">.</span><span style="color: #0000FF;">val</span> <span style="color: #008000;">=</span> <span style="color: #6666cc; font-weight: bold;">int</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Parse</span><span style="color: #008000;">&#40;</span>node<span style="color: #008000;">.</span><span style="color: #0000FF;">InnerText</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span>
	    <span style="color: #0600FF; font-weight: bold;">else</span> <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>node<span style="color: #008000;">.</span><span style="color: #0000FF;">Name</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Equals</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;real&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> value<span style="color: #008000;">.</span><span style="color: #0000FF;">val</span> <span style="color: #008000;">=</span> <span style="color: #6666cc; font-weight: bold;">float</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Parse</span><span style="color: #008000;">&#40;</span>node<span style="color: #008000;">.</span><span style="color: #0000FF;">InnerText</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span>
	    <span style="color: #0600FF; font-weight: bold;">else</span> <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>node<span style="color: #008000;">.</span><span style="color: #0000FF;">Name</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Equals</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;date&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> value<span style="color: #008000;">.</span><span style="color: #0000FF;">val</span> <span style="color: #008000;">=</span> DateTime<span style="color: #008000;">.</span><span style="color: #0000FF;">Parse</span><span style="color: #008000;">&#40;</span>node<span style="color: #008000;">.</span><span style="color: #0000FF;">InnerText</span>, <span style="color: #0600FF; font-weight: bold;">null</span>, DateTimeStyles<span style="color: #008000;">.</span><span style="color: #0000FF;">None</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span> <span style="color: #008080; font-style: italic;">// Date objects are in ISO 8601 format</span>
	    <span style="color: #0600FF; font-weight: bold;">else</span> <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>node<span style="color: #008000;">.</span><span style="color: #0000FF;">Name</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Equals</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;data&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> value<span style="color: #008000;">.</span><span style="color: #0000FF;">val</span> <span style="color: #008000;">=</span> node<span style="color: #008000;">.</span><span style="color: #0000FF;">InnerText</span><span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span> <span style="color: #008080; font-style: italic;">// Data objects are just loaded as a string</span>
	    <span style="color: #0600FF; font-weight: bold;">else</span> <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>node<span style="color: #008000;">.</span><span style="color: #0000FF;">Name</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Equals</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;true&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> value<span style="color: #008000;">.</span><span style="color: #0000FF;">val</span> <span style="color: #008000;">=</span> <span style="color: #0600FF; font-weight: bold;">true</span><span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span> <span style="color: #008080; font-style: italic;">// Boollean values are empty objects, simply identified with a name being &quot;true&quot; or &quot;false&quot;</span>
	    <span style="color: #0600FF; font-weight: bold;">else</span> <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>node<span style="color: #008000;">.</span><span style="color: #0000FF;">Name</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Equals</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;false&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> value<span style="color: #008000;">.</span><span style="color: #0000FF;">val</span> <span style="color: #008000;">=</span> <span style="color: #0600FF; font-weight: bold;">false</span><span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span>
	    <span style="color: #008080; font-style: italic;">// The value can be an array or dict type.  In this case, we need to recursively call the appropriate loader functions for dict and arrays.</span>
	    <span style="color: #008080; font-style: italic;">// These functions will in turn return a boolean value for their success, so we can just return that.</span>
	    <span style="color: #008080; font-style: italic;">// The val value also has to be instantiated, since it's being passed by reference.</span>
	    <span style="color: #0600FF; font-weight: bold;">else</span> <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>node<span style="color: #008000;">.</span><span style="color: #0000FF;">Name</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Equals</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;dict&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> 
			value<span style="color: #008000;">.</span><span style="color: #0000FF;">val</span> <span style="color: #008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> Hashtable<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
			Hashtable htRef <span style="color: #008000;">=</span> <span style="color: #008000;">&#40;</span>Hashtable<span style="color: #008000;">&#41;</span>value<span style="color: #008000;">.</span><span style="color: #0000FF;">val</span><span style="color: #008000;">;</span>
			<span style="color: #0600FF; font-weight: bold;">return</span> LoadDictFromPlistNode<span style="color: #008000;">&#40;</span>node, <span style="color: #0600FF; font-weight: bold;">ref</span> htRef<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
		<span style="color: #008000;">&#125;</span>
	    <span style="color: #0600FF; font-weight: bold;">else</span> <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>node<span style="color: #008000;">.</span><span style="color: #0000FF;">Name</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Equals</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;array&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
			value<span style="color: #008000;">.</span><span style="color: #0000FF;">val</span> <span style="color: #008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> ArrayList<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
			ArrayList alRef <span style="color: #008000;">=</span> <span style="color: #008000;">&#40;</span>ArrayList<span style="color: #008000;">&#41;</span>value<span style="color: #008000;">.</span><span style="color: #0000FF;">val</span><span style="color: #008000;">;</span>
			<span style="color: #0600FF; font-weight: bold;">return</span> LoadArrayFromPlistNode<span style="color: #008000;">&#40;</span>node, <span style="color: #0600FF; font-weight: bold;">ref</span> alRef<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
		<span style="color: #008000;">&#125;</span> <span style="color: #0600FF; font-weight: bold;">else</span> <span style="color: #008000;">&#123;</span> 
			Debug<span style="color: #008000;">.</span><span style="color: #0000FF;">LogError</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Attempted to load a value from a non value type node: &quot;</span> <span style="color: #008000;">+</span> node <span style="color: #008000;">+</span> <span style="color: #666666;">&quot;, &quot;</span> <span style="color: #008000;">+</span> node<span style="color: #008000;">.</span><span style="color: #0000FF;">Name</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
			<span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #0600FF; font-weight: bold;">false</span><span style="color: #008000;">;</span>
		<span style="color: #008000;">&#125;</span>
&nbsp;
	    <span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #0600FF; font-weight: bold;">true</span><span style="color: #008000;">;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
	<span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #6666cc; font-weight: bold;">bool</span> LoadArrayFromPlistNode<span style="color: #008000;">&#40;</span>XmlNode node, <span style="color: #0600FF; font-weight: bold;">ref</span> ArrayList array <span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	    <span style="color: #008080; font-style: italic;">// If we were passed a null node object, then post an error stating so and return false</span>
	    <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>node <span style="color: #008000;">==</span> <span style="color: #0600FF; font-weight: bold;">null</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> 
			Debug<span style="color: #008000;">.</span><span style="color: #0000FF;">LogError</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Attempted to load a null plist array node.&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
			<span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #0600FF; font-weight: bold;">false</span><span style="color: #008000;">;</span>
		<span style="color: #008000;">&#125;</span>
	    <span style="color: #008080; font-style: italic;">// If we were passed a non array node, then post an error stating so and return false</span>
	    <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">!</span>node<span style="color: #008000;">.</span><span style="color: #0000FF;">Name</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Equals</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;array&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> 
			Debug<span style="color: #008000;">.</span><span style="color: #0000FF;">LogError</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Attempted to load an array from a non-array node type: &quot;</span> <span style="color: #008000;">+</span> node <span style="color: #008000;">+</span> <span style="color: #666666;">&quot;, &quot;</span> <span style="color: #008000;">+</span> node<span style="color: #008000;">.</span><span style="color: #0000FF;">Name</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span> 
			<span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #0600FF; font-weight: bold;">false</span><span style="color: #008000;">;</span>
		<span style="color: #008000;">&#125;</span>
&nbsp;
	    <span style="color: #008080; font-style: italic;">// We can be passed an empty array object.  If so, initialize it</span>
	    <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>array <span style="color: #008000;">==</span> <span style="color: #0600FF; font-weight: bold;">null</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> array <span style="color: #008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> ArrayList<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span>
&nbsp;
	    <span style="color: #008080; font-style: italic;">// Itterate through the child nodes for this array object</span>
	    <span style="color: #6666cc; font-weight: bold;">int</span> nodeCount <span style="color: #008000;">=</span> node<span style="color: #008000;">.</span><span style="color: #0000FF;">ChildNodes</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Count</span><span style="color: #008000;">;</span>
	    <span style="color: #0600FF; font-weight: bold;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">int</span> i <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span> i <span style="color: #008000;">&lt;</span> nodeCount<span style="color: #008000;">;</span> i<span style="color: #008000;">++</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	        <span style="color: #008080; font-style: italic;">// Establish variables to hold the child node of the array, and it's value</span>
	        XmlNode cnode <span style="color: #008000;">=</span> node<span style="color: #008000;">.</span><span style="color: #0000FF;">ChildNodes</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Item</span><span style="color: #008000;">&#40;</span>i<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
	        ValueObject element <span style="color: #008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> ValueObject<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
	        <span style="color: #008080; font-style: italic;">// Attempt to load the value from the current array node.</span>
	        <span style="color: #008080; font-style: italic;">// If successful, add it as an element of the array.  If not, post and error stating so and return false.</span>
	        <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>LoadValueFromPlistNode<span style="color: #008000;">&#40;</span>cnode, <span style="color: #0600FF; font-weight: bold;">ref</span> element<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> 
				array<span style="color: #008000;">.</span><span style="color: #0000FF;">Add</span><span style="color: #008000;">&#40;</span>element<span style="color: #008000;">.</span><span style="color: #0000FF;">val</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span> 
			<span style="color: #008000;">&#125;</span> <span style="color: #0600FF; font-weight: bold;">else</span> <span style="color: #008000;">&#123;</span> 
				<span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #0600FF; font-weight: bold;">false</span><span style="color: #008000;">;</span> 
			<span style="color: #008000;">&#125;</span>
	    <span style="color: #008000;">&#125;</span>
&nbsp;
	    <span style="color: #008080; font-style: italic;">// If we made it through the array without errors, return true</span>
	    <span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #0600FF; font-weight: bold;">true</span><span style="color: #008000;">;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
	<span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #6666cc; font-weight: bold;">bool</span> AddKeyValueToDict<span style="color: #008000;">&#40;</span><span style="color: #0600FF; font-weight: bold;">ref</span> Hashtable dict, <span style="color: #6666cc; font-weight: bold;">string</span> key, ValueObject value<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	    <span style="color: #008080; font-style: italic;">// Make sure that we have values that we can work with.</span>
	    <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>dict <span style="color: #008000;">==</span> <span style="color: #0600FF; font-weight: bold;">null</span> <span style="color: #008000;">||</span> key <span style="color: #008000;">==</span> <span style="color: #0600FF; font-weight: bold;">null</span> <span style="color: #008000;">||</span> key<span style="color: #008000;">.</span><span style="color: #0000FF;">Length</span> <span style="color: #008000;">&lt;</span> <span style="color: #FF0000;">1</span> <span style="color: #008000;">||</span> value <span style="color: #008000;">==</span> <span style="color: #0600FF; font-weight: bold;">null</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> 
			Debug<span style="color: #008000;">.</span><span style="color: #0000FF;">LogError</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Attempted to AddKeyValueToDict() with null objects.&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
			<span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #0600FF; font-weight: bold;">false</span><span style="color: #008000;">;</span>
		<span style="color: #008000;">&#125;</span>
	    <span style="color: #008080; font-style: italic;">// If the hashtable doesn't already contain the key, they we can just go ahead and add it.</span>
	    <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">!</span>dict<span style="color: #008000;">.</span><span style="color: #0000FF;">ContainsKey</span><span style="color: #008000;">&#40;</span>key<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> 
			dict<span style="color: #008000;">.</span><span style="color: #0000FF;">Add</span><span style="color: #008000;">&#40;</span>key, value<span style="color: #008000;">.</span><span style="color: #0000FF;">val</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
			<span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #0600FF; font-weight: bold;">true</span><span style="color: #008000;">;</span>
		<span style="color: #008000;">&#125;</span>
	    <span style="color: #008080; font-style: italic;">// At this point, the dict contains already contains the key we're trying to add.</span>
	    <span style="color: #008080; font-style: italic;">// If the value for this key is of a different type between the dict and the new value, then we have a type mismatch.</span>
	    <span style="color: #008080; font-style: italic;">// Post an error stating so, but go ahead and overwrite the existing key value.</span>
		<span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>value<span style="color: #008000;">.</span><span style="color: #0000FF;">val</span><span style="color: #008000;">.</span><span style="color: #0000FF;">GetType</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">!=</span> dict<span style="color: #008000;">&#91;</span>key<span style="color: #008000;">&#93;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">GetType</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	        Debug<span style="color: #008000;">.</span><span style="color: #0000FF;">LogWarning</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Value type mismatch for overlapping key (will replace old value with new one): &quot;</span> <span style="color: #008000;">+</span> value<span style="color: #008000;">.</span><span style="color: #0000FF;">val</span> <span style="color: #008000;">+</span> <span style="color: #666666;">&quot;, &quot;</span> <span style="color: #008000;">+</span> dict<span style="color: #008000;">&#91;</span>key<span style="color: #008000;">&#93;</span> <span style="color: #008000;">+</span> <span style="color: #666666;">&quot;, &quot;</span> <span style="color: #008000;">+</span> key<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
	        dict<span style="color: #008000;">&#91;</span>key<span style="color: #008000;">&#93;</span> <span style="color: #008000;">=</span> value<span style="color: #008000;">.</span><span style="color: #0000FF;">val</span><span style="color: #008000;">;</span>
	    <span style="color: #008000;">&#125;</span>
    	<span style="color: #008080; font-style: italic;">// If the value for this key is a hashtable, then we need to recursively add the key values of each hashtable.</span>
    	<span style="color: #0600FF; font-weight: bold;">else</span> <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>value<span style="color: #008000;">.</span><span style="color: #0000FF;">val</span><span style="color: #008000;">.</span><span style="color: #0000FF;">GetType</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">==</span> <a href="http://www.google.com/search?q=typeof+msdn.microsoft.com"><span style="color: #008000;">typeof</span></a><span style="color: #008000;">&#40;</span>Hashtable<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	        <span style="color: #008080; font-style: italic;">// Itterate through the elements of the value's hashtable.</span>
			Hashtable htTmp <span style="color: #008000;">=</span> <span style="color: #008000;">&#40;</span>Hashtable<span style="color: #008000;">&#41;</span>value<span style="color: #008000;">.</span><span style="color: #0000FF;">val</span><span style="color: #008000;">;</span>
	        <span style="color: #0600FF; font-weight: bold;">foreach</span> <span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">object</span> element <span style="color: #0600FF; font-weight: bold;">in</span> htTmp<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	            <span style="color: #008080; font-style: italic;">// Recursively attempt to add/repalce the elements of the value hashtable to the dict's value hashtable.</span>
	            <span style="color: #008080; font-style: italic;">// If this fails, post a message stating so and return false.</span>
				Hashtable htRef <span style="color: #008000;">=</span> <span style="color: #008000;">&#40;</span>Hashtable<span style="color: #008000;">&#41;</span>dict<span style="color: #008000;">&#91;</span>key<span style="color: #008000;">&#93;</span><span style="color: #008000;">;</span>
	            <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">!</span>AddKeyValueToDict<span style="color: #008000;">&#40;</span><span style="color: #0600FF; font-weight: bold;">ref</span> htRef, <span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">string</span><span style="color: #008000;">&#41;</span>element, <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> ValueObject<span style="color: #008000;">&#40;</span>htTmp<span style="color: #008000;">&#91;</span>element<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	                Debug<span style="color: #008000;">.</span><span style="color: #0000FF;">LogError</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Failed to add key value to dict: &quot;</span> <span style="color: #008000;">+</span> element <span style="color: #008000;">+</span> <span style="color: #666666;">&quot;, &quot;</span> <span style="color: #008000;">+</span> htTmp<span style="color: #008000;">&#91;</span>element<span style="color: #008000;">&#93;</span> <span style="color: #008000;">+</span> <span style="color: #666666;">&quot;, &quot;</span> <span style="color: #008000;">+</span> dict<span style="color: #008000;">&#91;</span>key<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
	                <span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #0600FF; font-weight: bold;">false</span><span style="color: #008000;">;</span>
	            <span style="color: #008000;">&#125;</span>
	        <span style="color: #008000;">&#125;</span>
    	<span style="color: #008000;">&#125;</span>
	    <span style="color: #008080; font-style: italic;">// If the value is an array, then there's really no way we can tell which elements to overwrite, because this is done based on the congruent keys.</span>
	    <span style="color: #008080; font-style: italic;">// Thus, we'll just add the elements of the array to the existing array.</span>
	    <span style="color: #0600FF; font-weight: bold;">else</span> <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>value<span style="color: #008000;">.</span><span style="color: #0000FF;">val</span><span style="color: #008000;">.</span><span style="color: #0000FF;">GetType</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">==</span> <a href="http://www.google.com/search?q=typeof+msdn.microsoft.com"><span style="color: #008000;">typeof</span></a><span style="color: #008000;">&#40;</span>ArrayList<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
			ArrayList alTmp <span style="color: #008000;">=</span> <span style="color: #008000;">&#40;</span>ArrayList<span style="color: #008000;">&#41;</span>value<span style="color: #008000;">.</span><span style="color: #0000FF;">val</span><span style="color: #008000;">;</span>
			ArrayList alAddTmp <span style="color: #008000;">=</span> <span style="color: #008000;">&#40;</span>ArrayList<span style="color: #008000;">&#41;</span>dict<span style="color: #008000;">&#91;</span>key<span style="color: #008000;">&#93;</span><span style="color: #008000;">;</span>
			<span style="color: #0600FF; font-weight: bold;">foreach</span> <span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">object</span> element <span style="color: #0600FF; font-weight: bold;">in</span> alTmp<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
				alAddTmp<span style="color: #008000;">.</span><span style="color: #0000FF;">Add</span><span style="color: #008000;">&#40;</span>element<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
			<span style="color: #008000;">&#125;</span>
	    <span style="color: #008000;">&#125;</span>
	    <span style="color: #008080; font-style: italic;">// If the key value is not an array or a hashtable, then it's a primitive value that we can easily write over.</span>
	    <span style="color: #0600FF; font-weight: bold;">else</span> <span style="color: #008000;">&#123;</span> 
			dict<span style="color: #008000;">&#91;</span>key<span style="color: #008000;">&#93;</span> <span style="color: #008000;">=</span> value<span style="color: #008000;">.</span><span style="color: #0000FF;">val</span><span style="color: #008000;">;</span>
		<span style="color: #008000;">&#125;</span>
&nbsp;
    	<span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #0600FF; font-weight: bold;">true</span><span style="color: #008000;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #008080;">#endregion</span>
&nbsp;
&nbsp;
	<span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #6666cc; font-weight: bold;">bool</span> SavePlistToFile <span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">String</span> xmlFile, Hashtable plist<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	    <span style="color: #008080; font-style: italic;">// If the hashtable is null, then there's apparently an issue; fail out.</span>
	    <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>plist <span style="color: #008000;">==</span> <span style="color: #0600FF; font-weight: bold;">null</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> 
			Debug<span style="color: #008000;">.</span><span style="color: #0000FF;">LogError</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Passed a null plist hashtable to SavePlistToFile.&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
			<span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #0600FF; font-weight: bold;">false</span><span style="color: #008000;">;</span>
		<span style="color: #008000;">&#125;</span>
&nbsp;
	    <span style="color: #008080; font-style: italic;">// Create the base xml document that we will use to write the data</span>
	    XmlDocument xml <span style="color: #008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> XmlDocument<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
	    xml<span style="color: #008000;">.</span><span style="color: #0000FF;">XmlResolver</span> <span style="color: #008000;">=</span> <span style="color: #0600FF; font-weight: bold;">null</span><span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">//Disable schema/DTD validation, it's not implemented for Unity.</span>
	    <span style="color: #008080; font-style: italic;">// Create the root XML declaration</span>
	    <span style="color: #008080; font-style: italic;">// This, and the DOCTYPE, below, are standard parts of a XML property list file</span>
	    XmlDeclaration xmldecl <span style="color: #008000;">=</span> xml<span style="color: #008000;">.</span><span style="color: #0000FF;">CreateXmlDeclaration</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;1.0&quot;</span>, <span style="color: #666666;">&quot;UTF-8&quot;</span>, <span style="color: #0600FF; font-weight: bold;">null</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
	    xml<span style="color: #008000;">.</span><span style="color: #0000FF;">PrependChild</span><span style="color: #008000;">&#40;</span>xmldecl<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
	    <span style="color: #008080; font-style: italic;">// Create the DOCTYPE</span>
	    XmlDocumentType doctype <span style="color: #008000;">=</span> xml<span style="color: #008000;">.</span><span style="color: #0000FF;">CreateDocumentType</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;plist&quot;</span>, <span style="color: #666666;">&quot;-//Apple//DTD PLIST 1.0//EN&quot;</span>, <span style="color: #666666;">&quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&quot;</span>, <span style="color: #0600FF; font-weight: bold;">null</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
	    xml<span style="color: #008000;">.</span><span style="color: #0000FF;">AppendChild</span><span style="color: #008000;">&#40;</span>doctype<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
	    <span style="color: #008080; font-style: italic;">// Create the root plist node, with a version number attribute.</span>
	    <span style="color: #008080; font-style: italic;">// Every plist file has this as the root element.  We're using version 1.0 of the plist scheme</span>
	    XmlNode plistNode <span style="color: #008000;">=</span> xml<span style="color: #008000;">.</span><span style="color: #0000FF;">CreateNode</span><span style="color: #008000;">&#40;</span>XmlNodeType<span style="color: #008000;">.</span><span style="color: #0000FF;">Element</span>, <span style="color: #666666;">&quot;plist&quot;</span>, <span style="color: #0600FF; font-weight: bold;">null</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
	    XmlAttribute plistVers <span style="color: #008000;">=</span> <span style="color: #008000;">&#40;</span>XmlAttribute<span style="color: #008000;">&#41;</span>xml<span style="color: #008000;">.</span><span style="color: #0000FF;">CreateNode</span><span style="color: #008000;">&#40;</span>XmlNodeType<span style="color: #008000;">.</span><span style="color: #0000FF;">Attribute</span>, <span style="color: #666666;">&quot;version&quot;</span>, <span style="color: #0600FF; font-weight: bold;">null</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
	    plistVers<span style="color: #008000;">.</span><span style="color: #0000FF;">Value</span> <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;1.0&quot;</span><span style="color: #008000;">;</span>
	    plistNode<span style="color: #008000;">.</span><span style="color: #0000FF;">Attributes</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Append</span><span style="color: #008000;">&#40;</span>plistVers<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
	    xml<span style="color: #008000;">.</span><span style="color: #0000FF;">AppendChild</span><span style="color: #008000;">&#40;</span>plistNode<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
	    <span style="color: #008080; font-style: italic;">// Now that we've created the base for the XML file, we can add all of our information to it.</span>
	    <span style="color: #008080; font-style: italic;">// Pass the plist data and the root dict node to SaveDictToPlistNode, which will write the plist data to the dict node.</span>
	    <span style="color: #008080; font-style: italic;">// This function will itterate through the hashtable hierarchy and call itself recursively for child hashtables.</span>
	    <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">!</span>SaveDictToPlistNode<span style="color: #008000;">&#40;</span>plistNode, plist<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	        <span style="color: #008080; font-style: italic;">// If for some reason we failed, post an error and return false.</span>
	        Debug<span style="color: #008000;">.</span><span style="color: #0000FF;">LogError</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Failed to save plist data to root dict node: &quot;</span> <span style="color: #008000;">+</span> plist<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
	        <span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #0600FF; font-weight: bold;">false</span><span style="color: #008000;">;</span>
	    <span style="color: #008000;">&#125;</span> <span style="color: #0600FF; font-weight: bold;">else</span> <span style="color: #008000;">&#123;</span> <span style="color: #008080; font-style: italic;">// We were successful</span>
	        <span style="color: #008080; font-style: italic;">// Create a StreamWriter and write the XML file to disk.</span>
	        <span style="color: #008080; font-style: italic;">// (do not append and UTF-8 are default, but we're defining it explicitly just in case)</span>
	        StreamWriter sw <span style="color: #008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> StreamWriter<span style="color: #008000;">&#40;</span>xmlFile, <span style="color: #0600FF; font-weight: bold;">false</span>, <span style="color: #000000;">System.<span style="color: #0000FF;">Text</span></span><span style="color: #008000;">.</span><span style="color: #0000FF;">Encoding</span><span style="color: #008000;">.</span><span style="color: #0000FF;">UTF8</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
	        xml<span style="color: #008000;">.</span><span style="color: #0000FF;">Save</span><span style="color: #008000;">&#40;</span>sw<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
	        sw<span style="color: #008000;">.</span><span style="color: #0000FF;">Close</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
	    <span style="color: #008000;">&#125;</span>
&nbsp;
	    <span style="color: #008080; font-style: italic;">// We're done here.  If there were any failures, they would have returned false.</span>
	    <span style="color: #008080; font-style: italic;">// Return true to indicate success.</span>
	    <span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #0600FF; font-weight: bold;">true</span><span style="color: #008000;">;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
	<span style="color: #008080;">#region SAVE_PLIST_PRIVATE_METHODS</span>
&nbsp;
	<span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #6666cc; font-weight: bold;">bool</span> SaveDictToPlistNode<span style="color: #008000;">&#40;</span>XmlNode node, Hashtable dict<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	    <span style="color: #008080; font-style: italic;">// If we were passed a null object, return false</span>
	    <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>node <span style="color: #008000;">==</span> <span style="color: #0600FF; font-weight: bold;">null</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
			Debug<span style="color: #008000;">.</span><span style="color: #0000FF;">LogError</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Attempted to save a null plist dict node.&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
			<span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #0600FF; font-weight: bold;">false</span><span style="color: #008000;">;</span>
		<span style="color: #008000;">&#125;</span>
&nbsp;
	    XmlNode dictNode <span style="color: #008000;">=</span> node<span style="color: #008000;">.</span><span style="color: #0000FF;">OwnerDocument</span><span style="color: #008000;">.</span><span style="color: #0000FF;">CreateNode</span><span style="color: #008000;">&#40;</span>XmlNodeType<span style="color: #008000;">.</span><span style="color: #0000FF;">Element</span>, <span style="color: #666666;">&quot;dict&quot;</span>, <span style="color: #0600FF; font-weight: bold;">null</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
	    node<span style="color: #008000;">.</span><span style="color: #0000FF;">AppendChild</span><span style="color: #008000;">&#40;</span>dictNode<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
	    <span style="color: #008080; font-style: italic;">// We could be passed an null hashtable.  This isn't necessarily an error.</span>
	    <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>dict <span style="color: #008000;">==</span> <span style="color: #0600FF; font-weight: bold;">null</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> 
			Debug<span style="color: #008000;">.</span><span style="color: #0000FF;">LogWarning</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Attemped to save a null dict: &quot;</span> <span style="color: #008000;">+</span> dict<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span> 
			<span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #0600FF; font-weight: bold;">true</span><span style="color: #008000;">;</span>
		<span style="color: #008000;">&#125;</span>
&nbsp;
	    <span style="color: #008080; font-style: italic;">// Iterate through the keys in the hashtable</span>
	    <span style="color: #008080; font-style: italic;">//for (var key in dict.Keys) {</span>
		<span style="color: #0600FF; font-weight: bold;">foreach</span> <span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">object</span> key <span style="color: #0600FF; font-weight: bold;">in</span> dict<span style="color: #008000;">.</span><span style="color: #0000FF;">Keys</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	        <span style="color: #008080; font-style: italic;">// Since plists are key value pairs, save the key to the plist as a new XML element</span>
	        XmlElement keyNode <span style="color: #008000;">=</span> node<span style="color: #008000;">.</span><span style="color: #0000FF;">OwnerDocument</span><span style="color: #008000;">.</span><span style="color: #0000FF;">CreateElement</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;key&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
	        keyNode<span style="color: #008000;">.</span><span style="color: #0000FF;">InnerText</span> <span style="color: #008000;">=</span> <span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">string</span><span style="color: #008000;">&#41;</span>key<span style="color: #008000;">;</span>
	        dictNode<span style="color: #008000;">.</span><span style="color: #0000FF;">AppendChild</span><span style="color: #008000;">&#40;</span>keyNode<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
	        <span style="color: #008080; font-style: italic;">// The name of the value element is based on the datatype of the value.  We need to serialize it accordingly.  Pass the XML node and the hash value to SaveValueToPlistNode to handle this.</span>
	        <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">!</span>SaveValueToPlistNode<span style="color: #008000;">&#40;</span>dictNode, dict<span style="color: #008000;">&#91;</span>key<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	            <span style="color: #008080; font-style: italic;">// If SaveValueToPlistNode() returns false, that means there was an error.  Return false to indicate this up the line.</span>
	            Debug<span style="color: #008000;">.</span><span style="color: #0000FF;">LogError</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Failed to save value to plist node: &quot;</span> <span style="color: #008000;">+</span> key<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
	            <span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #0600FF; font-weight: bold;">false</span><span style="color: #008000;">;</span>
	        <span style="color: #008000;">&#125;</span>
	    <span style="color: #008000;">&#125;</span>
&nbsp;
	    <span style="color: #008080; font-style: italic;">// If we got this far then all is well.  Return true to indicate success.</span>
	    <span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #0600FF; font-weight: bold;">true</span><span style="color: #008000;">;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
	<span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #6666cc; font-weight: bold;">bool</span> SaveValueToPlistNode<span style="color: #008000;">&#40;</span>XmlNode node, <span style="color: #6666cc; font-weight: bold;">object</span> value<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	    <span style="color: #008080; font-style: italic;">// The node passed will be the parent node to the new value node.</span>
	    XmlNode valNode<span style="color: #008000;">;</span>
	    <span style="color: #000000;">System</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Type</span> type <span style="color: #008000;">=</span> value<span style="color: #008000;">.</span><span style="color: #0000FF;">GetType</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
	    <span style="color: #008080; font-style: italic;">// Identify the data type for the value and serialize it accordingly</span>
	    <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>type <span style="color: #008000;">==</span> <a href="http://www.google.com/search?q=typeof+msdn.microsoft.com"><span style="color: #008000;">typeof</span></a><span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">String</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> 
			valNode <span style="color: #008000;">=</span> node<span style="color: #008000;">.</span><span style="color: #0000FF;">OwnerDocument</span><span style="color: #008000;">.</span><span style="color: #0000FF;">CreateElement</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;string&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span> 
		<span style="color: #008000;">&#125;</span>
	    <span style="color: #0600FF; font-weight: bold;">else</span> <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>type <span style="color: #008000;">==</span> <a href="http://www.google.com/search?q=typeof+msdn.microsoft.com"><span style="color: #008000;">typeof</span></a><span style="color: #008000;">&#40;</span>Int16<span style="color: #008000;">&#41;</span> <span style="color: #008000;">||</span> 
		         type <span style="color: #008000;">==</span> <a href="http://www.google.com/search?q=typeof+msdn.microsoft.com"><span style="color: #008000;">typeof</span></a><span style="color: #008000;">&#40;</span>Int32<span style="color: #008000;">&#41;</span> <span style="color: #008000;">||</span>
		         type <span style="color: #008000;">==</span> <a href="http://www.google.com/search?q=typeof+msdn.microsoft.com"><span style="color: #008000;">typeof</span></a><span style="color: #008000;">&#40;</span>Int64<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> valNode <span style="color: #008000;">=</span> node<span style="color: #008000;">.</span><span style="color: #0000FF;">OwnerDocument</span><span style="color: #008000;">.</span><span style="color: #0000FF;">CreateElement</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;integer&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span>
	    <span style="color: #0600FF; font-weight: bold;">else</span> <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>type <span style="color: #008000;">==</span> <a href="http://www.google.com/search?q=typeof+msdn.microsoft.com"><span style="color: #008000;">typeof</span></a><span style="color: #008000;">&#40;</span>Single<span style="color: #008000;">&#41;</span> <span style="color: #008000;">||</span> 
		         type <span style="color: #008000;">==</span> <a href="http://www.google.com/search?q=typeof+msdn.microsoft.com"><span style="color: #008000;">typeof</span></a><span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">Double</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">||</span>
		         type <span style="color: #008000;">==</span> <a href="http://www.google.com/search?q=typeof+msdn.microsoft.com"><span style="color: #008000;">typeof</span></a><span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">Decimal</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> valNode <span style="color: #008000;">=</span> node<span style="color: #008000;">.</span><span style="color: #0000FF;">OwnerDocument</span><span style="color: #008000;">.</span><span style="color: #0000FF;">CreateElement</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;real&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span>
	    <span style="color: #0600FF; font-weight: bold;">else</span> <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>type <span style="color: #008000;">==</span> <a href="http://www.google.com/search?q=typeof+msdn.microsoft.com"><span style="color: #008000;">typeof</span></a><span style="color: #008000;">&#40;</span>DateTime<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	        <span style="color: #008080; font-style: italic;">// Dates need to be stored in ISO 8601 format</span>
	        valNode <span style="color: #008000;">=</span> node<span style="color: #008000;">.</span><span style="color: #0000FF;">OwnerDocument</span><span style="color: #008000;">.</span><span style="color: #0000FF;">CreateElement</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;date&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
			DateTime dt <span style="color: #008000;">=</span> <span style="color: #008000;">&#40;</span>DateTime<span style="color: #008000;">&#41;</span>value<span style="color: #008000;">;</span>
	        valNode<span style="color: #008000;">.</span><span style="color: #0000FF;">InnerText</span> <span style="color: #008000;">=</span> dt<span style="color: #008000;">.</span><span style="color: #0000FF;">ToUniversalTime</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">ToString</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;o&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
	        node<span style="color: #008000;">.</span><span style="color: #0000FF;">AppendChild</span><span style="color: #008000;">&#40;</span>valNode<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
	        <span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #0600FF; font-weight: bold;">true</span><span style="color: #008000;">;</span>
	    <span style="color: #008000;">&#125;</span>
	    <span style="color: #0600FF; font-weight: bold;">else</span> <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>type <span style="color: #008000;">==</span> <a href="http://www.google.com/search?q=typeof+msdn.microsoft.com"><span style="color: #008000;">typeof</span></a><span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">bool</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	        <span style="color: #008080; font-style: italic;">// Boolean values are empty elements, simply being stored as an elemement with a name of true or false</span>
	        <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">bool</span><span style="color: #008000;">&#41;</span>value <span style="color: #008000;">==</span> <span style="color: #0600FF; font-weight: bold;">true</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> valNode <span style="color: #008000;">=</span> node<span style="color: #008000;">.</span><span style="color: #0000FF;">OwnerDocument</span><span style="color: #008000;">.</span><span style="color: #0000FF;">CreateElement</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;true&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span>
	        <span style="color: #0600FF; font-weight: bold;">else</span> <span style="color: #008000;">&#123;</span> valNode <span style="color: #008000;">=</span> node<span style="color: #008000;">.</span><span style="color: #0000FF;">OwnerDocument</span><span style="color: #008000;">.</span><span style="color: #0000FF;">CreateElement</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;false&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span>
	        node<span style="color: #008000;">.</span><span style="color: #0000FF;">AppendChild</span><span style="color: #008000;">&#40;</span>valNode<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
	        <span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #0600FF; font-weight: bold;">true</span><span style="color: #008000;">;</span>
	    <span style="color: #008000;">&#125;</span>
	    <span style="color: #008080; font-style: italic;">// Hashtables and arrays require special functions to save their values in an itterative and recursive manner.</span>
	    <span style="color: #008080; font-style: italic;">// The functions will return true/false to indicate success/failure, so pass those on.</span>
	    <span style="color: #0600FF; font-weight: bold;">else</span> <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>type <span style="color: #008000;">==</span> <a href="http://www.google.com/search?q=typeof+msdn.microsoft.com"><span style="color: #008000;">typeof</span></a><span style="color: #008000;">&#40;</span>Hashtable<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>    <span style="color: #008000;">&#123;</span> 
			<span style="color: #0600FF; font-weight: bold;">return</span> SaveDictToPlistNode<span style="color: #008000;">&#40;</span>node, <span style="color: #008000;">&#40;</span>Hashtable<span style="color: #008000;">&#41;</span>value<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span> 
		<span style="color: #008000;">&#125;</span>
	    <span style="color: #0600FF; font-weight: bold;">else</span> <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>type <span style="color: #008000;">==</span> <a href="http://www.google.com/search?q=typeof+msdn.microsoft.com"><span style="color: #008000;">typeof</span></a><span style="color: #008000;">&#40;</span>ArrayList<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> <span style="color: #0600FF; font-weight: bold;">return</span> SaveArrayToPlistNode<span style="color: #008000;">&#40;</span>node, <span style="color: #008000;">&#40;</span>ArrayList<span style="color: #008000;">&#41;</span>value<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span>
	    <span style="color: #008080; font-style: italic;">// Anything that doesn't fit the defined data types will just be stored as &quot;data&quot;, which is effectively a string.</span>
	    <span style="color: #0600FF; font-weight: bold;">else</span> <span style="color: #008000;">&#123;</span> 
			valNode <span style="color: #008000;">=</span> node<span style="color: #008000;">.</span><span style="color: #0000FF;">OwnerDocument</span><span style="color: #008000;">.</span><span style="color: #0000FF;">CreateElement</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;data&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
		<span style="color: #008000;">&#125;</span>
&nbsp;
	    <span style="color: #008080; font-style: italic;">// Some of the values (strings, numbers, data) basically get stored as a string.  The rest will store their values in their special format and return true for success.  If we made it this far, then the value in valNode must be stored as a string.</span>
	    <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>valNode <span style="color: #008000;">!=</span> <span style="color: #0600FF; font-weight: bold;">null</span><span style="color: #008000;">&#41;</span> valNode<span style="color: #008000;">.</span><span style="color: #0000FF;">InnerText</span> <span style="color: #008000;">=</span> value<span style="color: #008000;">.</span><span style="color: #0000FF;">ToString</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
	    node<span style="color: #008000;">.</span><span style="color: #0000FF;">AppendChild</span><span style="color: #008000;">&#40;</span>valNode<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
	    <span style="color: #008080; font-style: italic;">// We're done.  Return true for success.</span>
	    <span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #0600FF; font-weight: bold;">true</span><span style="color: #008000;">;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
	<span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #6666cc; font-weight: bold;">bool</span> SaveArrayToPlistNode <span style="color: #008000;">&#40;</span>XmlNode node, ArrayList array<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	    <span style="color: #008080; font-style: italic;">// Create the value node as an &quot;array&quot; element.</span>
	    XmlElement arrayNode <span style="color: #008000;">=</span> node<span style="color: #008000;">.</span><span style="color: #0000FF;">OwnerDocument</span><span style="color: #008000;">.</span><span style="color: #0000FF;">CreateElement</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;array&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
	    node<span style="color: #008000;">.</span><span style="color: #0000FF;">AppendChild</span><span style="color: #008000;">&#40;</span>arrayNode<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
	    <span style="color: #008080; font-style: italic;">// Each element in the array can be any data type.  Itterate through the array and send each element to SaveValueToPlistNode(), where it can be stored accordingly based on its data type.</span>
	    <span style="color: #0600FF; font-weight: bold;">foreach</span> <span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">object</span> element <span style="color: #0600FF; font-weight: bold;">in</span> array<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	        <span style="color: #008080; font-style: italic;">// If SaveValueToPlistNode() returns false, then there was a problem.  Return false in that case.</span>
	        <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">!</span>SaveValueToPlistNode<span style="color: #008000;">&#40;</span>arrayNode, element<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> <span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #0600FF; font-weight: bold;">false</span><span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span>
	    <span style="color: #008000;">&#125;</span>
    	<span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #0600FF; font-weight: bold;">true</span><span style="color: #008000;">;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
	<span style="color: #008080;">#endregion</span>
&nbsp;
<span style="color: #008000;">&#125;</span> <span style="color: #008080; font-style: italic;">//end PListManager class</span>
&nbsp;
<span style="color: #6666cc; font-weight: bold;">class</span> ValueObject <span style="color: #008000;">&#123;</span> 
	<span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">object</span> val<span style="color: #008000;">;</span>
	<span style="color: #0600FF; font-weight: bold;">public</span> ValueObject<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><span style="color: #008000;">&#125;</span>
	<span style="color: #0600FF; font-weight: bold;">public</span> ValueObject<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">object</span> aVal<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> val <span style="color: #008000;">=</span> aVal<span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://www.chrisdanielson.com/2011/05/09/using-apple-property-list-files-with-unity3d/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>iPhone users able to build a shinier world, one turd at a time</title>
		<link>http://www.chrisdanielson.com/2010/05/25/iphone-users-able-to-build-a-shinier-world-one-turd-at-a-time/</link>
		<comments>http://www.chrisdanielson.com/2010/05/25/iphone-users-able-to-build-a-shinier-world-one-turd-at-a-time/#comments</comments>
		<pubDate>Tue, 25 May 2010 20:27:16 +0000</pubDate>
		<dc:creator>Chris Danielson</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Entertainment]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[iPod touch]]></category>
		<category><![CDATA[Polish It]]></category>
		<category><![CDATA[Turd Polishing]]></category>

		<guid isPermaLink="false">http://www.chrisdanielson.com/?p=365</guid>
		<description><![CDATA[Turd Polishing has hit the iPhone with a splatter.]]></description>
			<content:encoded><![CDATA[<p>This blog usually focuses on software development, but I can&#8217;t  resist sharing this with all of you out there.  Have a good laugh!</p>
<p><strong>MaxPowerSoft Puts a New Polish on an Old Adage: You Actually Can  Polish a Turd</strong></p>
<p><object width="425" height="355" type="application/x-shockwave-flash" data="http://www.youtube.com/v/6kZxC1WCk3Y"><param name="movie" value="http://www.youtube.com/v/6kZxC1WCk3Y" />This video was embedded using the YouTuber plugin by <a href="http://www.roytanck.com">Roy Tanck</a>. Adobe Flash Player is required to view the video.</object></p>
<p>&#8216;<strong><a href="http://itunes.apple.com/us/app/polish-it/id345199287?mt=8">Polish It</a>&#8216;</strong> now available at the iPhone App Store</p>
<p>SAN DIEGO, CA (May 24, 2010) &#8211; MaxPowerSoft (www.maxpowersoft.com) today announced the release of Polish It, an iPhone application designed to facilitate &#8220;a shinier world, one turd at a time&#8221;. Available for $0.99 at Apple&#8217;s iPhone App Store, ‘Polish It’ is both a literal and cute/comedic take on the old and well-known phrase “You can’t polish a turd”. Your goal is simple: Choose a turd you like, and polish it! Utilize the touchscreen and your finger for polishing, tilt the phone to maneuver, and snap a photo at anytime to share.</p>
<p>&#8220;We wanted to reach out and give frustrated workers, students, and really all curious people in general, the powerful ability to truly polish a turd,&#8221; says Nic Danielson, Director of Marketing. &#8220;MaxPowerSoft has created an innovative new technology that allows one to therapeutically accomplish the task of polishing turds in the palm of your hand, no matter where you are, and on a whim to boot &#8211; most importantly, it can be done without the need for any sanitization processes.  There really is nothing else like it in the market, or the world for that matter.&#8221;</p>
<p>Features of Polish It include:</p>
<ul>
<li>Objects rendered in full 3D.</li>
<li>Choose from over 10 objects to polish.</li>
<li>Simple controls: Touch to polish, Tilt phone to maneuver.</li>
<li>Snap a photo and send to your friends.</li>
<li>More features to come.</li>
</ul>
<p>Pricing and Availability:</p>
<p>Polish It is available for $0.99 at the iPhone App Store:</p>
<p><a href="http://itunes.apple.com/us/app/polish-it/id345199287?mt=8">http://itunes.apple.com/us/app/polish-it/id345199287?mt=8</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.chrisdanielson.com/2010/05/25/iphone-users-able-to-build-a-shinier-world-one-turd-at-a-time/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Apple iPhone Web Kit with Activity Indicator</title>
		<link>http://www.chrisdanielson.com/2009/12/04/apple-iphone-web-kit-with-activity-indicator/</link>
		<comments>http://www.chrisdanielson.com/2009/12/04/apple-iphone-web-kit-with-activity-indicator/#comments</comments>
		<pubDate>Fri, 04 Dec 2009 16:38:43 +0000</pubDate>
		<dc:creator>Chris Danielson</dc:creator>
				<category><![CDATA[iPhone Development]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[UIActivityIndicatorView]]></category>
		<category><![CDATA[UIWebView]]></category>
		<category><![CDATA[Web Kit]]></category>
		<category><![CDATA[WebKit]]></category>

		<guid isPermaLink="false">http://www.chrisdanielson.com/?p=290</guid>
		<description><![CDATA[Welcome to the club of searching for an overly simple UIWebView a.k.a. WebKit example! In this example, I&#8217;ll show you simply how to hand code a quick UIWebView into your program as well as to add a UIActivityIndicatorView a.k.a. an activity indicator. Without jabbing Apple too hard here, the documentation is pretty bad and that [...]]]></description>
			<content:encoded><![CDATA[<p>Welcome to the club of searching for an overly simple UIWebView a.k.a. WebKit example!  In this example, I&#8217;ll show you simply how to hand code a quick UIWebView into your program as well as to add a UIActivityIndicatorView a.k.a. an activity indicator.  Without jabbing Apple too hard here, the documentation is pretty bad and that is why it&#8217;s nice to have an example just shown to you as-is.  I hope this example helps shine a light on the situation for anyone wanting to implement a nice and quick Apple iPhone WebKit solution.</p>

<div class="wp_codebox_msgheader"><span class="right"></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p290code4'); return false;">View Code</a> OBJC</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p2904"><td class="code" id="p290code4"><pre class="objc" style="font-family:monospace;">&nbsp;
<span style="color: #6e371a;">#import &lt;UIKit/UIKit.h&gt;</span>
&nbsp;
<span style="color: #a61390;">@interface</span> FirstViewController <span style="color: #002200;">:</span> UIViewController &lt;UIWebViewDelegate&gt;
<span style="color: #002200;">&#123;</span>
	UIWebView <span style="color: #002200;">*</span>myWebView;
	UIActivityIndicatorView <span style="color: #002200;">*</span>activityIndicator;	
<span style="color: #002200;">&#125;</span></pre></td></tr></table></div>


<div class="wp_codebox_msgheader"><span class="right"></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p290code5'); return false;">View Code</a> OBJC</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p2905"><td class="code" id="p290code5"><pre class="objc" style="font-family:monospace;"><span style="color: #11740a; font-style: italic;">/*
Inside the @implementation FirstViewController ... 
*/</span>
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>viewDidLoad <span style="color: #002200;">&#123;</span> <span style="color: #11740a; font-style: italic;">//We have a NIB file in play here, so I dropped the loadView here.  Just make sure that your loadView is not getting called twice!</span>
    <span style="color: #002200;">&#91;</span>super viewDidLoad<span style="color: #002200;">&#93;</span>;
    <span style="color: #002200;">&#91;</span>self loadView<span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>loadView <span style="color: #002200;">&#123;</span>
	UIView <span style="color: #002200;">*</span>contentView <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>UIView alloc<span style="color: #002200;">&#93;</span> initWithFrame<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>UIScreen mainScreen<span style="color: #002200;">&#93;</span> applicationFrame<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#93;</span>;
	self.view <span style="color: #002200;">=</span> contentView;	
&nbsp;
	CGRect webFrame <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>UIScreen mainScreen<span style="color: #002200;">&#93;</span> applicationFrame<span style="color: #002200;">&#93;</span>;
	webFrame.origin.y <span style="color: #002200;">=</span> 0.0f;
	myWebView <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>UIWebView alloc<span style="color: #002200;">&#93;</span> initWithFrame<span style="color: #002200;">:</span>webFrame<span style="color: #002200;">&#93;</span>;
	myWebView.backgroundColor <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>UIColor blueColor<span style="color: #002200;">&#93;</span>;
	myWebView.scalesPageToFit <span style="color: #002200;">=</span> <span style="color: #a61390;">YES</span>;
	myWebView.autoresizingMask <span style="color: #002200;">=</span> <span style="color: #002200;">&#40;</span>UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight<span style="color: #002200;">&#41;</span>;
	myWebView.delegate <span style="color: #002200;">=</span> self;
	<span style="color: #002200;">&#91;</span>self.view addSubview<span style="color: #002200;">:</span> myWebView<span style="color: #002200;">&#93;</span>;
	<span style="color: #002200;">&#91;</span>myWebView loadRequest<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSURLRequest_Class/"><span style="color: #400080;">NSURLRequest</span></a> requestWithURL<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSURL_Class/"><span style="color: #400080;">NSURL</span></a> URLWithString<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;http://www.maxpowersoft.com/&quot;</span><span style="color: #002200;">&#93;</span><span style="color: #002200;">&#93;</span><span style="color: #002200;">&#93;</span>;
&nbsp;
	activityIndicator <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>UIActivityIndicatorView alloc<span style="color: #002200;">&#93;</span>initWithActivityIndicatorStyle<span style="color: #002200;">:</span>UIActivityIndicatorViewStyleGray<span style="color: #002200;">&#93;</span>;
	activityIndicator.frame <span style="color: #002200;">=</span> CGRectMake<span style="color: #002200;">&#40;</span><span style="color: #2400d9;">0.0</span>, <span style="color: #2400d9;">0.0</span>, <span style="color: #2400d9;">40.0</span>, <span style="color: #2400d9;">40.0</span><span style="color: #002200;">&#41;</span>;
	activityIndicator.center <span style="color: #002200;">=</span> self.view.center;
	<span style="color: #002200;">&#91;</span>self.view addSubview<span style="color: #002200;">:</span> activityIndicator<span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>dealloc <span style="color: #002200;">&#123;</span>
	<span style="color: #002200;">&#91;</span>activityIndicator release<span style="color: #002200;">&#93;</span>;
	<span style="color: #002200;">&#91;</span>myWebView release<span style="color: #002200;">&#93;</span>;
        <span style="color: #002200;">&#91;</span>super dealloc<span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #6e371a;">#pragma mark WEBVIEW Methods</span>
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>webViewDidStartLoad<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>UIWebView <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>webView
<span style="color: #002200;">&#123;</span>
	<span style="color: #11740a; font-style: italic;">// starting the load, show the activity indicator in the status bar</span>
	<span style="color: #002200;">&#91;</span>UIApplication sharedApplication<span style="color: #002200;">&#93;</span>.networkActivityIndicatorVisible <span style="color: #002200;">=</span> <span style="color: #a61390;">YES</span>;
	<span style="color: #002200;">&#91;</span>activityIndicator startAnimating<span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>webViewDidFinishLoad<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>UIWebView <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>webView
<span style="color: #002200;">&#123;</span>
	<span style="color: #11740a; font-style: italic;">// finished loading, hide the activity indicator in the status bar</span>
	<span style="color: #002200;">&#91;</span>UIApplication sharedApplication<span style="color: #002200;">&#93;</span>.networkActivityIndicatorVisible <span style="color: #002200;">=</span> <span style="color: #a61390;">NO</span>;
	<span style="color: #002200;">&#91;</span>activityIndicator stopAnimating<span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>webView<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>UIWebView <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>webView didFailLoadWithError<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSError_Class/"><span style="color: #400080;">NSError</span></a> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>error
<span style="color: #002200;">&#123;</span>
	<span style="color: #11740a; font-style: italic;">// load error, hide the activity indicator in the status bar</span>
	<span style="color: #002200;">&#91;</span>UIApplication sharedApplication<span style="color: #002200;">&#93;</span>.networkActivityIndicatorVisible <span style="color: #002200;">=</span> <span style="color: #a61390;">NO</span>;
&nbsp;
	<span style="color: #11740a; font-style: italic;">// report the error inside the webview</span>
	<a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a><span style="color: #002200;">*</span> errorString <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a> stringWithFormat<span style="color: #002200;">:</span>
							 <span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;&lt;html&gt;&lt;center&gt;&lt;br /&gt;&lt;br /&gt;&lt;font size=+5 color='red'&gt;Error&lt;br /&gt;&lt;br /&gt;Your request %@&lt;/font&gt;&lt;/center&gt;&lt;/html&gt;&quot;</span>,
							 error.localizedDescription<span style="color: #002200;">&#93;</span>;
	<span style="color: #002200;">&#91;</span>myWebView loadHTMLString<span style="color: #002200;">:</span>errorString baseURL<span style="color: #002200;">:</span><span style="color: #a61390;">nil</span><span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#125;</span></pre></td></tr></table></div>

<p>That is all there is to it.  It&#8217;s really simple as you can see.  Feel free to copy and paste accordingly.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.chrisdanielson.com/2009/12/04/apple-iphone-web-kit-with-activity-indicator/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
	</channel>
</rss>

