Monotouch: преобразовать объект в NSObject

Как можно преобразовать экземпляр объекта в экземпляр NSObject?

Я создал NSDictionary из

NSDictionary.FromObjectAndKey();

Этот метод хочет NSObject, но у меня есть собственный объект для передачи:

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

Как это исправить? Заранее спасибо.


person Lorenzo B    schedule 14.04.2011    source источник


Ответы (3)


Вы не можете преобразовать произвольный объект в NSObject. NSObject.FromObject попытается обернуть общие типы данных, такие как числа, строки, прямоугольники, точки, преобразования и несколько других типов .NET, в их эквивалентные типы NSObject.

В вашем конкретном примере «MyClass» должен быть получен из NSObject, прежде чем вы сможете использовать его в NSDictionary.

person miguel.de.icaza    schedule 15.04.2011

Самым простым решением, которое я смог найти, было обернуть объект .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;
person Former Gaucho    schedule 28.11.2014
comment
Независимо от того, что это не отвечает на исходный вопрос, он показывает, как преобразовывать объекты в NSObjects и обратно. Очень помогает! - person Ahmed Ahmedov; 29.06.2016
comment
Я удивлен, что это не стандартная вещь где-то. - person tofutim; 03.10.2017

Это способ:

NSDictionary.FromObjectAndKey(NSObject.FromObject(val), NSObject.FromObject(key));
person Dimitris Tavlikos    schedule 14.04.2011
comment
Спасибо. Но кажется не работает. Возникает исключение: аргумент Obj не может быть нулевым. Это довольно странно, потому что когда я печатаю key или val, значения есть! - person Lorenzo B; 14.04.2011
comment
Вы правы, я только что проверил, что он скомпилирован. Его нельзя преобразовать. Вы должны ввести ключи/значения в NSDictionary, производные от NSObject. Преобразование int выполнено успешно. - person Dimitris Tavlikos; 14.04.2011