【问题标题】:Monotouch: convert an Object to NSObjectMonotouch:将对象转换为 NSObject
【发布时间】:2011-08-05 13:54:05
【问题描述】:

如何将 Object 实例转换为 NSObject one?

我从

创建了一个 NSDictionary
NSDictionary.FromObjectAndKey();

这个方法需要一个 NSObject 但我有自定义对象要传入:

int key = 2341;
var val = new MyClass();
NSDictionary.FromObjectAndKey(val, key); // obviously it does not work!!

如何解决这个问题?提前谢谢你。

【问题讨论】:

    标签: object xamarin.ios type-conversion nsobject


    【解决方案1】:

    我能找到的最简单的解决方案是将 .Net 对象包装在 NSObject 中,然后根据需要展开。

    public class NSObjectWrapper : NSObject
    {
        public object Context;
    
        public NSObjectWrapper (object obj) : base()
        {
            this.Context = obj;
        }
    
        public static NSObjectWrapper Wrap(object obj)
        {
            return new NSObjectWrapper(obj);
        }
    }
    

    使用示例:

    // wrap
    var myNSObj = NSObjectWrapper.Wrap(new MyClass());
    // unwrap
    var myObj = myNSObj.Context as MyClass;
    

    【讨论】:

    • 无论这不是回答原始问题,它都展示了如何将对象转换为 NSObjects 并返回。很有帮助!
    • 我很惊讶这不是一个标准的东西。
    【解决方案2】:

    您不能将任意对象转换为 NSObject。 NSObject.FromObject 将尝试将常见的数据类型(如数字、字符串、矩形、点、变换和一些其他 .NET 类型)包装到它们等效的 NSObject 类型中。

    在您的特定示例中,“MyClass”必须从 NSObject 派生,然后才能在 NSDictionary 中使用它。

    【讨论】:

      【解决方案3】:

      就是这样:

      NSDictionary.FromObjectAndKey(NSObject.FromObject(val), NSObject.FromObject(key));
      

      【讨论】:

      • 谢谢。但似乎不起作用。抛出异常:Obj 参数不能为空。这很奇怪,因为当我打印 key 或 val 时,值就在那里!
      • 你是对的,我刚刚测试它编译。它无法转换。您必须在派生自 NSObject 的 NSDictionary 中输入键/值。 int 转换成功。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多