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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions