Глобальная переменная в Objective C IPhone - PullRequest
3 голосов
/ 01 июля 2011

Я загружаю несколько переменных в своем классе appdelegate. Они объявлены в моем .h файле.

У меня есть global.h файл, который объявляет те же самые переменные, что и extern, например:

appdelegate.h

NSString *DBName;

global.h

extern NSString *DBName;

Я еще не нашел шаблон, но некоторые из классов, которые я включаю, global.h, но переменная равна нулю.

Есть идеи, что я делаю не так?

EDIT:

Похоже, переменные похожи на:

int x;

палка и доступны, но переменные, которые являются указателями, теряются:

NSString *Name;

Все они изначально загружаются из БД в приложении appdelegate.

Я тоже пытался объявить

char Name[30];

потом присваиваешь и все хорошо.

Что теперь?

Ответы [ 3 ]

4 голосов
/ 01 июля 2011

В .ч: ​​

 extern NSString *global;

В .м где-то:

 NSString *global = @"foobar";

Если вам нужно установить глобальный во время выполнения, вы должны будете сделать это где-нибудь в методе; скажем, applicationDidFinishLaunching:.

<Ч />

Где вы присваиваете глобал в случае NSString? И когда вы сохраняете ценность? Что вы подразумеваете под "потерянным"?

Обратите внимание, что переменная не должна быть объявлена ​​ в .h; extern идет в .h, NSString *global; должен быть в одном и только одном файле .m.

1 голос
/ 01 июля 2011

С какими переменными вы работаете?Это примитивы или объекты?Если они являются примитивами, вы можете подумать о операторах определения препроцессора, а не о глобальных переменных.

Если они являются объектами, вы можете создать реализацию своего класса Global и использовать экземпляр Singleton для обслуживания и установкипеременные.Что-то похожее на это

@implementation Global
static Global *myGlobal = nil;

+(Global *)sharedInstance
{
    if (myGlobal == nil) {
         myGlobal = [[self alloc] init];
    }
    return myGlobal;
}

@end

Затем вы можете вызывать переменные используя:

[[Global sharedInstance] variableName]  
0 голосов
/ 03 июля 2011

Проблема в том, что строки NSS не были сохранены.@xianritchie предложил это в комментарии выше.Я изменил несколько глобальных строк, которые у меня есть, теперь все хорошо.

Спасибо всем за помощь

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