Очень близко - вы не можете инициализировать нелокальную переменную неконстантным выражением, а вызов метода по своей сути неконстантный, даже если он выглядит так, как и должно быть.Поэтому, в принципе, измените его на
NSMutableString *string;
, но если он будет использоваться только внутри файла реализации (например, другие классы получат его только через UV_TouchpadViewController, а не получат / установят его напрямую (это такжерекомендуемый шаблон)), затем квалифицируйте его как статический, например,
static NSMutableString *string;
Если, с другой стороны, вы хотите иметь доступ к нему напрямую из UV_TouchpadViewController, оставьте статический, но добавьте
extern NSMutableString *string;
в файл header (вне класса @interface), и тот, кто включит заголовок, сможет получить к нему доступ.(Обратите внимание, что вместо этого вы можете просто поместить NSMutableString *string;
в заголовочный файл, однако это быстро становится неясным)
Кроме того, если вы пытаетесь сделать это для одноэлементного класса (я не могу думать охорошая причина иметь глобальную изменяемую строку - вы знаете, что они не безопасны для потоков, верно?) Я рекомендую сначала прочитать документы Apple по синглетам, где они предлагают использовать ивары, а не глобальные переменные, даже для синглетонов.Однако UV_TouchpadViewController не должен даже быть синглтоном (если он каким-либо образом является контроллером представления), он должен иметь только один экземпляр, если это все, что вы хотите.
Если нас другой стороны, вы просто хотите, чтобы все UV_TouchpadViewControllers имели доступ к этой единственной переменной, обратите внимание, что почти во всех языках это считается плохим шаблоном проектирования (глобальные переменные являются плохими), и что вы должны вместо этого вставить его, скажем, в делегат приложения (гарантированно будет иметь один глобально доступный экземпляр), где это могут быть элементы доступа ivar + и, как правило, считается настройкой и (с небольшим дополнительным кодом) сохраняется.
РЕДАКТИРОВАТЬ:
Если вы хотите иметь синглтон, поддерживающий глобальное состояние, против которого я все еще рекомендую - вы должны создать класс, например, ApplicationState,который обрабатывает все глобальное состояние приложения как объект модели в традиционном шаблоне модель-представление-контроллер.Я не буду вдаваться в подробности, потому что это было бы крайне избыточно для поиска в Google.
В вашем Application Application где-нибудь добавьте ivar ApplicationState *state
и соответствующий @property (и @synthesize в файле реализации).).