2009-03-18 15 views
8

Probablemente haya una solución muy simple para esto, pero no puedo hacer que funcione.¿Cómo puedo acceder a variables de otra clase?

Tengo varias clases en mi archivo Cocoa. En una de las clases class1 creo una variable que necesito usar en otra clase class2 también. ¿Hay una manera simple de importar esta variable en class2?

+0

"Tengo varias clases en mi archivo Cocoa." La forma habitual es crear un par de archivos (MyClass.h, MyClass.m) para cada clase. Puede hacer esto haciendo clic con el botón derecho en un grupo en el proyecto y haciendo clic en Agregar archivo. Creará el .m, y el .h vendrá gratis. –

+1

El acceso directo a variables de instancia es una muy mala idea. Usa propiedades y sintetiza los accesorios o escribe los tuyos. El acceso directo variable rompe cosas como KVO y enlaces en Mac OS X, y no es buena práctica de OO. – Alex

Respuesta

13

Puede hacer pública la variable o convertirla en una propiedad. Por ejemplo, para hacerlo público:

@interface Class1 
{ 
@public 
    int var; 
} 
// methods... 
@end 

// Inside a Class2 method: 
Class1 *obj = ...; 
obj->var = 3; 

para que sea una propiedad:

@interface Class1 
{ 
    int var; // @protected by default 
} 
@property (readwrite, nonatomic) int var; 
// methods... 
@end 

@implementation Class1 
@synthesize var; 
... 
@end 

// Inside a Class2 method: 
Class1 *obj = ...; 
obj.var = 3; // implicitly calls [obj setVar:3] 
int x = obj.var; // implicitly calls x = [obj var]; 
+2

El enfoque de la propiedad es mucho mejor, IMHO – Abizern

6

que podría exponer la variable de clase 2 como una propiedad. Si class1 tiene una referencia a class2, class1 puede ver la variable. Honestamente, sin embargo, parece que eres un principiante tanto para el Objective-C como para la programación orientada a objetos. Te recomiendo que leas más sobre ambos.

Here is a place para iniciar la programación orientada a objetos con Objective-C.

+3

¿Es "stackoverflow.com" solo para usuarios avanzados? Cómo definir quién es el principiante y quién no.El tipo no dio la pregunta dónde aprender el objetivo-C. –

+3

Honestamente de acuerdo con @DariusMiliauskas: P – preetam

3

intente hacer un archivo que contenga las variables a las que se debe acceder a través de la aplicación.

extern NSString *stringVariable; 

@interface GlobalVariables 

@property (retain, nonatomic) NSString *stringVariable;  

@end 

y en el archivo GlobalVariables.m añadir

#import "GlobalVariables.h" 

@implements GlobalVariables 

@synthesize stringVariable; 

NSString *stringVariable; 

@end 

Y luego, siempre y cuando se importa en qué archivos GlobalVariables.h vez .m necesita tener acceso a esa variable en que puede asignar y el acceso en cualquier parte de tu programa.

EDITAR

Mi respuesta que he dado más arriba no es diferente la forma en que iba a ir haciendo esto ahora. Sería más como

@interface MyClass 

@property (nonatomic, strong) NSString *myVariable; 

@end 

a continuación en el archivo .m

@implementation MyClass 

@sythesize = myVariable = _myVariable; // Not that we need to do this anymore 

@end 

Luego, en otra clase en algún método que tendría

// ..... 
MyClass *myClass = [[MyClass alloc] init]; 
[myClass setMyVariable:@"My String to go in my variable"]; 
// ..... 
1

En "XCode" lo que necesita realice la importación, cree un objeto declarándolo como propiedad y luego use la sintaxis "object.variable". El archivo "Class2.m" se vería de la siguiente manera:

#import Class2.h 
#import Class1.h; 

@interface Class2() 
... 
@property (nonatomic, strong) Class1 *class1; 
... 
@end 

@implementation Class2 

//accessing the variable from balloon.h 
...class1.variableFromClass1...; 

... 
@end 

¡Gracias! :-)

Cuestiones relacionadas