Skip to content

About the conversion of plist and Objective-C object #232

@AiXanadu

Description

@AiXanadu

In the instrument service, the Selector and Auxiliaries used for communication are Object-C objects, and the structure includes $top, $objects and $archiver
Can we add a packing and unpacking operation?

An example of a string is as follows:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
	<string>example</string>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
	<key>$archiver</key>
	<string>NSKeyedArchiver</string>
	<key>$objects</key>
	<array>
		<string>$null</string>
		<string>example</string>
	</array>
	<key>$top</key>
	<dict>
		<key>root</key>
		<uid>1</uid>
	</dict>
	<key>$version</key>
	<integer>100000</integer>
</plist>

An example of an empty array is as follows

	auto		vObject = plist_new_array();
	if(vObject)
	{
		plist_array_append_item(vObject, plist_new_string("$null"));			// 0

		auto		vNode1 = plist_new_dict();					// 1
		if(vNode1)
		{
			// <key>$class</key>
			plist_dict_set_item(vNode1, "$class", plist_new_uid(2));

			// <key>NS.objects</key>
			auto		vNS_Objects = plist_new_array();
			if(vNS_Objects)
			{
				plist_dict_set_item(vNode1, "NS.objects", vNS_Objects);
			}
			plist_array_append_item(vObject, vNode1);
		}

		auto		vNode2 = plist_new_dict();					// 2
		if(vNode2)
		{
			// <key>$classes</key>
			auto		vNS_Classes = plist_new_array();
			if(vNS_Classes)
			{
				plist_array_append_item(vNS_Classes, plist_new_string("NSArray"));
				plist_array_append_item(vNS_Classes, plist_new_string("NSObject"));

				plist_dict_set_item(vNode2, "$classes", vNS_Classes);
			}
			// <key>$classname</key>
			plist_dict_set_item(vNode2, "$classname", plist_new_string("NSArray"));

			plist_array_append_item(vObject, vNode2);
		}
	}

An example of an empty object is as follows

auto		vObject = plist_new_array();
	if(vObject)
	{
		plist_array_append_item(vObject, plist_new_string("$null"));			// 0

		auto		vNode1 = plist_new_dict();					// 1
		if(vNode1)
		{
			// <key>$class</key>
			plist_dict_set_item(vNode1, "$class", plist_new_uid(2));

			// <key>NS.keys</key>
			auto		vNS_Keys = plist_new_array();
			if(vNS_Keys)
			{
				plist_dict_set_item(vNode1, "NS.keys", vNS_Keys);
			}

			// <key>NS.objects</key>
			auto		vNS_Objects = plist_new_array();
			if(vNS_Objects)
			{
				plist_dict_set_item(vNode1, "NS.objects", vNS_Objects);
			}
			plist_array_append_item(vObject, vNode1);
		}

		auto		vNode2 = plist_new_dict();					// 2
		if(vNode2)
		{
			// <key>$classes</key>
			auto		vNS_Classes = plist_new_array();
			if(vNS_Classes)
			{
				plist_array_append_item(vNS_Classes, plist_new_string("NSDictionary"));
				plist_array_append_item(vNS_Classes, plist_new_string("NSObject"));

				plist_dict_set_item(vNode2, "$classes", vNS_Classes);
			}
			// <key>$classname</key>
			plist_dict_set_item(vNode2, "$classname", plist_new_string("NSDictionary"));

			plist_array_append_item(vObject, vNode2);
		}
	}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions