2009-11-01 9 views
2

Comment puis-je utiliser un NSString dans un fichier où cette chaîne n'a pas été créée?Utiliser NSString dans un autre fichier que celui dans lequel il a été créé

ex. J'ai créé une chaîne dans thisone.m, mais je veux utiliser la même piqûre (ie les mêmes données) dans thatone.m les données de cette chaîne seront à venir d'un UITextField

+0

Veuillez clarifier la question et donner un peu de contexte. –

+0

c'est mieux ???? –

Répondre

1

Si vous ne disposez pas d'un accès à l'objet thisone, vous pouvez stocker la chaîne comme une variable de classe ThisOne, aussi longtemps que vous n'avez pas besoin d'un autre pour chacun de vos objets. Mettez le dans votre classe (pas à l'intérieur d'une méthode, mais en dehors de la @implementation)

extern BOOL theString; 

L'accès est par

[ThisOne theString]; 

Ce n'est pas aussi bon que la réponse de ennuikiller, mais il pourrait être ce que vous avoir besoin.

+0

ok, donc je l'ai près, mais je reçois des erreurs (peut ne pas répondre à '+ chaîne'), donc au moins je sais que c'est un peu de travail –

+0

le mettre dans le fichier .h, en dehors de l'interface. – coneybeare

+0

Je reçois toujours l'erreur ... –

1

Je ne sais pas exactement ce que vous demandez, mais il existe de nombreuses façons de partager des données entre fichiers (ou objets). Vous pouvez le définir en tant que variable d'instance dans une classe et prendre une référence à l'instance d'objet dans une autre classe. Vous pouvez transmettre les données à une méthode appelée sur l'autre objet, ou vous pouvez les partager en tant que variable globale en en faisant une variable d'instance de UIApplication.

Encore une fois, sans être plus précis dans votre question, cela devrait vous faire réfléchir sur le bon chemin.

Comme un exemple simple:

@interface MyObject : NSObject { 
    NSString *mystring; 
} 
+0

comment puis-je faire une NSString une variable d'instance? –

+0

ok, alors comment pourrais-je faire tout à partir de là .... Dois-je faire quelque chose dans le. –

0

Je sais que certaines personnes n'aiment pas # define, mais elles fonctionnent bien pour ce programmeur C old-school.

Dans chaque projet, je dispose d'un fichier « strings.h » qui contient un tas de # définir de tels que:

#define SK_String_I_Want_To_Display @"String I Want To Display" 

(. Où SK_ est ma préface pour indiquer « constante chaîne »)

Pour la localisation, j'ai un autre fichier appelé "LocalStrings.h" avec des chaînes comme:

#define SK_LOCAL(a) NSLocalizedString(@a, "") // keeps string defs simple 
#define SK_Localized_String SK_LOCAL("Localized String") 
#define SK_Another_String  SK_LOCAL("Another String") 

Alors je viens #import "strings.h" ou "LocalStrings.h" en cas de besoin. Parce que j'ai toutes les chaînes localisées dans un fichier, il est facile de m'assurer que j'ai tout localisé.

Le plus gros problème avec cette approche est que vous devez faire attention de ne pas faire quelque chose comme ceci:

#define SK_Another_String  SK_LOCAL("Another String"); 

--- comme celui virgule à la fin peut causer des bugs difficiles qui sont difficiles à trouver.

Le surdébit d'avoir le #define étendu en place est assez faible. Les compilations prennent un peu plus de temps si vous changez l'un de ces fichiers .h, mais je trouve que la solution fonctionne bien.

Questions connexes