Проблема доступа NSMutableString - PullRequest
0 голосов
/ 25 июля 2011

Так что я хотел бы получить доступ и отобразить отформатированную дату вне моей функции.Для формата даты я использую NSDateFormatter, который работает нормально.

Моя функция (didFinishUpdatesSuccessfully) выполняет некоторое действие, и в случае успеха отображает UIAlertView, который включает отформатированную дату.Все это прекрасно работает.

- (void) didFinishUpdatesSuccessfully {

    //--- Create formatted date
    NSDate *currDate = [NSDate date];
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
        [dateFormatter setDateFormat:@"dd/MM/YYYY - hh:mm:ss a"];
    NSString *dateString = [dateFormatter stringFromDate:currDate];     // dateString contains the current date as a string

    [dateFormatter release];


    //--- UIAlertView
    NSString *title = @"The update has been performed!";

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle: title
                                                    message: dateString
                                                   delegate: nil
                                          cancelButtonTitle: [FileUtils appResourceForKey:@"UPDATE_GENERAL_BUTTON_TITLE_OK"]
                                          otherButtonTitles: nil];
    [alert show];
    [alert release];

    //--- create new string
    // NSMutableString* lastUpdated = [NSMutableString stringWithFormat:@"%@",dateString];

}

Теперь я хочу записать значение dateString в глобальный NSString или NSMutableString и получить к нему доступ в другом месте кода, например, в другой функции и т. Д..

Я думал о создании NSMutableString следующим образом: NSMutableString* lastUpdated = [NSMutableString stringWithFormat:@"%@",dateString]; и доступе к lastUpdated где-то еще, но другая функция lastUpdated пуста ... Вы можете помочь?Приветствия

Ответы [ 2 ]

0 голосов
/ 25 июля 2011

Вы должны сохранить строку как.

NSMutableString* lastUpdated;
lastUpdated = [[NSMutableString stringWithFormat:@"%@",dateString] retain];

Теперь попробуйте получить доступ снаружи.

0 голосов
/ 25 июля 2011
NSMutableString* lastUpdated = [NSMutableString stringWithFormat:@"%@",dateString];

Если вы сделаете это, вы объявите локальную переменную с именем lastUpdated. Даже если есть другая глобальная переменная с тем же именем, эта локальная будет скрывать глобальную переменную до тех пор, пока она находится в области видимости (срок действия вашей функции).

Чтобы это работало, вам нужно объявить глобальный lastUpdated где-то вне какой-либо функции или метода, возможно, в верхней части файла .m:

NSMutableString *lastUpdated;

Затем вы можете получить доступ к этой переменной из любого места в файле .m. Если вы хотите получить к нему доступ в других файлах .m, вам нужно добавить объявление extern в соответствующий файл заголовка (.h):

extern NSMutableString *lastUpdated;

С этим объявлением вы можете использовать lastUpdated в любом файле, который включает этот заголовочный файл.

Две вещи, которые нужно знать:

  1. Это базовый материал на C, поэтому, если он кажется незнакомым, вам следует просмотреть правила области видимости для C. Узнайте разницу между глобальной переменной, статической переменной, локальной переменной, переменной экземпляра (хорошо, обычный старый C не имеет их), а параметр.

  2. Глобальные переменные ужасны. Не доверяй никому, кто говорит тебе иначе. Я предлагаю приведенный выше совет, чтобы помочь решить вашу непосредственную проблему, но лучшим решением было бы выяснить, как реорганизовать ваш код, чтобы вы могли избежать необходимости в глобальной переменной. (И IMO, синглтон тоже не является ответом. Синглтоны, используемые только для доступа к глобальным данным, не намного больше, чем модные глобальные переменные.)

...