Подтвердить что ты не робот

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

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

Я создал NSDictionary из

NSDictionary.FromObjectAndKey();

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

Самое легкое решение, которое я смог найти, - это обернуть объект .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;

Ответ 3

Это способ:

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