2009-02-13 7 views
0

je veux passer une variable d'un viewcontroller à l'autre la façon dont je fais est au premier fichier d'en-tête de viewcontroller i déclarais une variablecomment passer une variable entre deux viewcontroller?

1.h:

NSString * chaîne;

et au deuxième viewcontroller j'ai importer le 1.h dans mon fichier 2.m, la façon dont j'appelle la variable est

2.m:

NSString * chaine2 = 1. chaîne

mais il retourne une erreur quelqu'un peut me apprendre à faire, parce que je n'ai pas de la base solide à la programmation orientée objet, grâce

Répondre

1

Cela garantit que chaque classe a une variable appelée chaîne ou chaîne2 - mais lorsque votre programme est en cours d'exécution, ce sont des objets réels qui doivent faire référence à des instances spécifiques de chaîne1 (ou chaîne2). C'est comme concevoir une maison avec une boîte aux lettres - la boîte aux lettres est là sur le plan de la maison, mais rien ne se passe jusqu'à ce qu'une lettre spécifique soit envoyée à une maison spécifique.

Ce que vous devez faire est de câbler les cas réels de votre classe, possibily dans une méthode d'initialisation, comme ceci:

// 1.h 

@interface ViewController1 : UIViewController 
{ 
// declare our variable 
NSString* string1; 
} 

// declare 'string1' as a property 
@property (retain) NSString* string1; 

// 1.m 
// implements the property for string1 
@synthesize string1; 

// 2.h 
@interface ViewController2 : UIViewController 
{ 
// declare our variable 
NSString* string2; 
} 

// declare 'string2' as a property 
@property (retain) NSString* string2; 

// 2.m 

- (id)initWithTitle:(NSString*)aTitle andString1:aString 
    { 
if (self = [super init]) 
    { 
     self.title = aTitle; 
     self.string1 = aString; 
    } 

return self; 
} 

Puis, en 1.m, vous créez le second contrôleur, et le fil de la chaînes haut, comme ceci:

// 1.m 
mySecondController = [[ViewController2 alloc] initWithTitle:@"Controller 2" andString:string1]; 
0

Bien qu'il soit possible de di L'accès direct à des variables membres comme ça (en utilisant l'opérateur ->) n'est pas recommandé.

La méthode correcte consiste à fournir un accesseur pour obtenir/définir vos variables membres.

En Objective-C 2.0 (iPhone et OSX 10.5), vous pouvez facilement le faire en utilisant le mot-clé "property". Dans le cadre de la syntaxe de la propriété, vous pouvez également exprimer comment vous souhaitez que les objets "set" soient traités.

conservé - l'objet précédent sera libéré et le nouveau sera conservé copie - l'objet sera copié assign - l'objet sera assigné.

Ce sont les bases, je vous suggère de lire plus sur les propriétés.

La figure ci-dessous montre comment utiliser les propriétés dans votre exemple. Notez que parce que nous traitons avec un NSString, qui est une classe dérivée de NSObject, nous utilisons l'option "retain" pour nous assurer que les comptes de référence sont correctement mis à jour. La définition et la déclaration des deux chaînes ne suffisent pas à définir et à déclarer les deux chaînes.

// 1.h 

@interface ViewController1 : UIViewController 
{ 
// declare our variable 
NSString* _string; 
} 

// declare 'string' as a property 
@property (retain) NSString* string; 

// 1.m 
// implements the property for string 
@synthesize string = _string; 

// constructor for ViewController1 
-(id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle { 
    if (self = [super initWithNibName: name bundle: bundle]) { 
    // Initialize the string here. 
    self.string = @"Hello World"; 
    } 
} 

// 2.m 
NSString* oldString = view.string; 
view.string = @"New String"; 
+0

salut andrew i ont suivi le code u fournissent cependant, il retourne pas d'erreur, mais la chaîne ne peut toujours pas passer de viewcontroller1 il retourne la valeur de chaîne est NULL, peut me dire quelle est la raison –

+0

J'ai mis à jour l'exemple pour montrer l'initialisation de la chaîne dans le c onstructeur C'est toujours un bon idéal pour initialiser vos variables comme ça. –

Questions connexes