mirror of
https://gitee.com/csharpui/CPF.git
synced 2025-07-15 14:04:34 +08:00
151 lines
6.2 KiB
C#
151 lines
6.2 KiB
C#
![]() |
using CPF.Mac.ObjCRuntime;
|
||
|
using System;
|
||
|
using System.ComponentModel;
|
||
|
using System.Runtime.InteropServices;
|
||
|
|
||
|
namespace CPF.Mac.Foundation
|
||
|
{
|
||
|
[Register("NSPropertyListSerialization", true)]
|
||
|
public class NSPropertyListSerialization : NSObject
|
||
|
{
|
||
|
private static readonly IntPtr selDataWithPropertyListFormatOptionsError_Handle = Selector.GetHandle("dataWithPropertyList:format:options:error:");
|
||
|
|
||
|
private static readonly IntPtr selWritePropertyListToStreamFormatOptionsError_Handle = Selector.GetHandle("writePropertyList:toStream:format:options:error:");
|
||
|
|
||
|
private static readonly IntPtr selPropertyListWithDataOptionsFormatError_Handle = Selector.GetHandle("propertyListWithData:options:format:error:");
|
||
|
|
||
|
private static readonly IntPtr selPropertyListWithStreamOptionsFormatError_Handle = Selector.GetHandle("propertyListWithStream:options:format:error:");
|
||
|
|
||
|
private static readonly IntPtr selPropertyListIsValidForFormat_Handle = Selector.GetHandle("propertyList:isValidForFormat:");
|
||
|
|
||
|
private static readonly IntPtr class_ptr = Class.GetHandle("NSPropertyListSerialization");
|
||
|
|
||
|
public override IntPtr ClassHandle => class_ptr;
|
||
|
|
||
|
public static NSData DataWithPropertyList(NSObject plist, NSPropertyListFormat format, out NSError error)
|
||
|
{
|
||
|
return DataWithPropertyList(plist, format, NSPropertyListWriteOptions.Immutable, out error);
|
||
|
}
|
||
|
|
||
|
public static int WritePropertyList(NSObject plist, NSOutputStream stream, NSPropertyListFormat format, out NSError error)
|
||
|
{
|
||
|
return WritePropertyList(plist, stream, format, NSPropertyListWriteOptions.Immutable, out error);
|
||
|
}
|
||
|
|
||
|
public static NSObject PropertyListWithData(NSData data, ref NSPropertyListFormat format, out NSError error)
|
||
|
{
|
||
|
return PropertyListWithData(data, NSPropertyListReadOptions.Immutable, ref format, out error);
|
||
|
}
|
||
|
|
||
|
public static NSObject PropertyListWithStream(NSInputStream stream, ref NSPropertyListFormat format, out NSError error)
|
||
|
{
|
||
|
return PropertyListWithStream(stream, NSPropertyListReadOptions.Immutable, ref format, out error);
|
||
|
}
|
||
|
|
||
|
[EditorBrowsable(EditorBrowsableState.Advanced)]
|
||
|
[Export("initWithCoder:")]
|
||
|
public NSPropertyListSerialization(NSCoder coder)
|
||
|
: base(NSObjectFlag.Empty)
|
||
|
{
|
||
|
if (IsDirectBinding)
|
||
|
{
|
||
|
base.Handle = Messaging.IntPtr_objc_msgSend_IntPtr(base.Handle, Selector.InitWithCoder, coder.Handle);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
base.Handle = Messaging.IntPtr_objc_msgSendSuper_IntPtr(base.SuperHandle, Selector.InitWithCoder, coder.Handle);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
[EditorBrowsable(EditorBrowsableState.Advanced)]
|
||
|
public NSPropertyListSerialization(NSObjectFlag t)
|
||
|
: base(t)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
[EditorBrowsable(EditorBrowsableState.Advanced)]
|
||
|
public NSPropertyListSerialization(IntPtr handle)
|
||
|
: base(handle)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
[Export("dataWithPropertyList:format:options:error:")]
|
||
|
public static NSData DataWithPropertyList(NSObject plist, NSPropertyListFormat format, NSPropertyListWriteOptions options, out NSError error)
|
||
|
{
|
||
|
if (plist == null)
|
||
|
{
|
||
|
throw new ArgumentNullException("plist");
|
||
|
}
|
||
|
IntPtr intPtr = Marshal.AllocHGlobal(4);
|
||
|
Marshal.WriteInt32(intPtr, 0);
|
||
|
NSData result = (NSData)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend_IntPtr_UInt64_UInt64_IntPtr(class_ptr, selDataWithPropertyListFormatOptionsError_Handle, plist.Handle, (ulong)format, (ulong)options, intPtr));
|
||
|
IntPtr intPtr2 = Marshal.ReadIntPtr(intPtr);
|
||
|
error = ((intPtr2 != IntPtr.Zero) ? ((NSError)Runtime.GetNSObject(intPtr2)) : null);
|
||
|
Marshal.FreeHGlobal(intPtr);
|
||
|
return result;
|
||
|
}
|
||
|
|
||
|
[Export("writePropertyList:toStream:format:options:error:")]
|
||
|
public static int WritePropertyList(NSObject plist, NSOutputStream stream, NSPropertyListFormat format, NSPropertyListWriteOptions options, out NSError error)
|
||
|
{
|
||
|
if (plist == null)
|
||
|
{
|
||
|
throw new ArgumentNullException("plist");
|
||
|
}
|
||
|
if (stream == null)
|
||
|
{
|
||
|
throw new ArgumentNullException("stream");
|
||
|
}
|
||
|
IntPtr intPtr = Marshal.AllocHGlobal(4);
|
||
|
Marshal.WriteInt32(intPtr, 0);
|
||
|
int result = Messaging.int_objc_msgSend_IntPtr_IntPtr_UInt64_UInt64_IntPtr(class_ptr, selWritePropertyListToStreamFormatOptionsError_Handle, plist.Handle, stream.Handle, (ulong)format, (ulong)options, intPtr);
|
||
|
IntPtr intPtr2 = Marshal.ReadIntPtr(intPtr);
|
||
|
error = ((intPtr2 != IntPtr.Zero) ? ((NSError)Runtime.GetNSObject(intPtr2)) : null);
|
||
|
Marshal.FreeHGlobal(intPtr);
|
||
|
return result;
|
||
|
}
|
||
|
|
||
|
[Export("propertyListWithData:options:format:error:")]
|
||
|
public static NSObject PropertyListWithData(NSData data, NSPropertyListReadOptions options, ref NSPropertyListFormat format, out NSError error)
|
||
|
{
|
||
|
if (data == null)
|
||
|
{
|
||
|
throw new ArgumentNullException("data");
|
||
|
}
|
||
|
IntPtr intPtr = Marshal.AllocHGlobal(4);
|
||
|
Marshal.WriteInt32(intPtr, 0);
|
||
|
NSObject nSObject = Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend_IntPtr_UInt64_out_NSPropertyListFormat_IntPtr(class_ptr, selPropertyListWithDataOptionsFormatError_Handle, data.Handle, (ulong)options, out format, intPtr));
|
||
|
IntPtr intPtr2 = Marshal.ReadIntPtr(intPtr);
|
||
|
error = ((intPtr2 != IntPtr.Zero) ? ((NSError)Runtime.GetNSObject(intPtr2)) : null);
|
||
|
Marshal.FreeHGlobal(intPtr);
|
||
|
return nSObject;
|
||
|
}
|
||
|
|
||
|
[Export("propertyListWithStream:options:format:error:")]
|
||
|
public static NSObject PropertyListWithStream(NSInputStream stream, NSPropertyListReadOptions options, ref NSPropertyListFormat format, out NSError error)
|
||
|
{
|
||
|
if (stream == null)
|
||
|
{
|
||
|
throw new ArgumentNullException("stream");
|
||
|
}
|
||
|
IntPtr intPtr = Marshal.AllocHGlobal(4);
|
||
|
Marshal.WriteInt32(intPtr, 0);
|
||
|
NSObject nSObject = Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend_IntPtr_UInt64_out_NSPropertyListFormat_IntPtr(class_ptr, selPropertyListWithStreamOptionsFormatError_Handle, stream.Handle, (ulong)options, out format, intPtr));
|
||
|
IntPtr intPtr2 = Marshal.ReadIntPtr(intPtr);
|
||
|
error = ((intPtr2 != IntPtr.Zero) ? ((NSError)Runtime.GetNSObject(intPtr2)) : null);
|
||
|
Marshal.FreeHGlobal(intPtr);
|
||
|
return nSObject;
|
||
|
}
|
||
|
|
||
|
[Export("propertyList:isValidForFormat:")]
|
||
|
public static bool IsValidForFormat(NSObject plist, NSPropertyListFormat format)
|
||
|
{
|
||
|
if (plist == null)
|
||
|
{
|
||
|
throw new ArgumentNullException("plist");
|
||
|
}
|
||
|
return Messaging.bool_objc_msgSend_IntPtr_UInt64(class_ptr, selPropertyListIsValidForFormat_Handle, plist.Handle, (ulong)format);
|
||
|
}
|
||
|
}
|
||
|
}
|