Используйте NSString в другом файле, чем тот, в котором он создан - PullRequest
2 голосов
/ 01 ноября 2009

Как я могу использовать строку NSString в файле, где эта строка не была создана?

ех. Я создал строку в thisone.m, но я хочу использовать ту же строчку (то есть те же данные) в этомone.m данные из этой строки будут поступать из UITextField

Ответы [ 3 ]

1 голос
/ 01 ноября 2009

Если у вас нет доступа к объекту thisone, вы можете сохранить строку как переменную класса ThisOne, если вам не нужна отдельная переменная для каждого из ваших объектов. Поместите в свой класс (не внутри метода, а вне @implementation)

extern BOOL theString;

Доступ по

[ThisOne theString];

Это не так хорошо, как ответ ennuikiller, но это может быть то, что вам нужно.

1 голос
/ 01 ноября 2009

Я точно не знаю, о чем вы спрашиваете, но есть много способов обмена данными между файлами (или объектами). Вы можете определить его как переменную экземпляра в одном классе и взять ссылку на экземпляр объекта в другом классе. Вы можете передать данные в метод, вызванный для другого объекта, или вы можете поделиться ими как глобальной переменной, сделав ее переменной экземпляра UIApplication.

Опять же, не уточняя свой вопрос, это должно заставить вас задуматься о правильном пути.

В качестве простого примера:

@interface MyObject : NSObject {
     NSString *mystring;
}
0 голосов
/ 01 ноября 2009

Я знаю, что некоторые люди не любят # define's, но они хорошо работают для этого программиста старой школы C.

В каждом проекте у меня есть файл "Strings.h", который содержит несколько # define, например:

#define SK_String_I_Want_To_Display   @"String I Want To Display"  

(где SK_ - мое предисловие для обозначения «строковой константы».)

Для локализации у меня есть еще один файл с именем "LocalStrings.h" со строками вроде:

#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")

Тогда я просто #import "Strings.h" или "LocalStrings.h", где это необходимо. Поскольку у меня есть все локализованные строки в одном файле, легко убедиться, что я локализовал все.

Самая большая проблема с этим подходом заключается в том, что вы должны быть осторожны, чтобы не делать что-то вроде этого:

#define SK_Another_String     SK_LOCAL("Another String");

--- так как эта точка с запятой в конце может вызвать хитрые ошибки, которые трудно найти.

Затраты на расширение #define на месте довольно низкие. Компиляция займет немного больше времени, если вы измените один из этих файлов .h, но я считаю, что решение хорошо работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...