2011-04-14 9 views
16

¿Cómo es posible convertir una instancia de Object a NSObject one?Monotouch: convertir un objeto a NSObject

He creado un NSDictionary de

NSDictionary.FromObjectAndKey(); 

Este método quiere una NSObject pero tengo objeto personalizado para pasar en:

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

cómo solucionar este problema? Gracias de antemano.

Respuesta

13

no se puede convertir un objeto arbitrario en un NSObject. El objeto NSObject.FromObject intentará envolver tipos de datos comunes como números, cadenas, rectángulos, puntos, transformaciones y un puñado de otros tipos .NET en sus tipos equivalentes de NSObject.

En su ejemplo particular, "MyClass" debería derivarse de un NSObject antes de poder usarlo en NSDictionary.

2

Esta es la forma:

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

Gracias. Pero parece que no funciona. Se lanza una excepción: el argumento de Obj no puede ser nulo. Es bastante extraño porque cuando imprimo key o val, ¡los valores están ahí! –

+0

Tienes razón, acabo de probar que compiló. No puede convertirse. Debe ingresar claves/valores en un NSDictionary que se deriva de NSObject. La conversión int tiene éxito. –

8

La solución más fácil que pude encontrar fue envolver el objeto .Net en un objeto NSOb, luego desenvolverlo según sea necesario.

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); 
    } 
} 

Ejemplo del uso:

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

No importa que esto no responda a la pregunta original, muestra cómo convertir Objetos a NSObjects y viceversa. ¡Ayuda mucho! –

+0

Me sorprende que esto no sea algo estándar en alguna parte. – tofutim

Cuestiones relacionadas