2011-04-14 66 views
16

如何將對象實例轉換爲NSObject對象?Monotouch:將對象轉換爲NSObject

我從

NSDictionary.FromObjectAndKey(); 

這種方法要一個NSObject創建的NSDictionary,但我有自定義對象中傳遞:

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

如何解決這一問題?先謝謝你。

回答

13

您可以任意對象不轉換成一個NSObject。 NSObject.FromObject將嘗試將諸如數字,字符串,矩形,點,轉換和一些其他.NET類型的常見數據類型包裝爲其等效的NSObject類型。

在您的特定示例中,「MyClass」必須先從NSObject派生,然後才能在NSDictionary中使用它。

2

這是這樣的:

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

謝謝。但似乎不工作。拋出異常:Obj參數不能爲空。當我打印key或val時,這很奇怪,值就在那裏! – 2011-04-14 14:47:08

+0

你是對的,我只是測試了它編譯。它不能被轉換。您必須在從NSObject派生的NSDictionary中輸入鍵/值。 int轉換成功。 – 2011-04-14 15:30:32

8

我能找到的最簡單的解決方案是將.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; 
+0

不管這不是回答原始問題,它顯示瞭如何將對象轉換爲NSObject並返回。幫助很多! – 2016-06-29 10:43:49

+0

我很驚訝這不是一個標準的事情。 – tofutim 2017-10-03 03:55:37