static string GetValueForNSObject(IntPtr obj) { using (var value = ObjCRuntime.Runtime.GetNSObject <NSObject> (obj, true)) { if (!value.IsKindOfClass(nsDataClass.Value)) { return(value.ToString()); } var data = ObjCRuntime.Runtime.GetINativeObject <NSData> (obj, false); if (data == null) { return(value.ToString()); } nuint detectedEncoding = NSString.DetectStringEncoding(data, new EncodingDetectionOptions { EncodingDetectionAllowLossy = false, EncodingDetectionUseOnlySuggestedEncodings = true, EncodingDetectionSuggestedEncodings = new NSStringEncoding [] { NSStringEncoding.UTF8, NSStringEncoding.Unicode, NSStringEncoding.ASCIIStringEncoding }, }, out string convertedString, out bool isLossy); if (convertedString == null) { return(null); } if (convertedString.Length > 0 && detectedEncoding != 0 && !isLossy) { return(convertedString); } if (TryGetNumberValueFromNSObject(data, out var numberString)) { return(numberString); } return(value.ToString()); } }