NSMutableString访问问题

时间:2011-07-25 04:34:37

标签: iphone xcode global-variables nsmutablestring

所以我想在我的功能之外访问并显示格式化的日期。对于日期格式,我使用的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的值写入全局NSStringNSMutableString,然后在代码中的其他位置访问它,例如另一个功能等。

我考虑像这样创建一个NSMutableStringNSMutableString* lastUpdated = [NSMutableString stringWithFormat:@"%@",dateString];并在其他地方访问lastUpdated,但此功能lastUpdated的空白是空的...你能帮帮忙吗?干杯

2 个答案:

答案 0 :(得分:0)

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

如果这样做,则表示名为lastUpdated的局部变量。即使有另一个具有相同名称的全局变量,只要它在范围内(函数的生命周期),这个本地变量就会隐藏全局变量。

要使这项工作,你需要在任何函数或方法之外的某个地方声明一个全局lastUpdated,可能在.m文件的顶部附近:

NSMutableString *lastUpdated;

然后,您可以从.m文件中的任何位置访问该变量。如果要在其他.m文件中访问它,您需要在相应的标题(.h)文件中添加extern声明:

extern NSMutableString *lastUpdated;

使用该声明,您可以在包含该头文件的任何文件中使用lastUpdated

要了解两件事:

  1. 这是基本的C东西,所以如果看起来不熟悉,你应该检查C的范围规则。知道全局变量,静态变量,局部变量,实例变量之间的区别(好吧,普通的老) C没有那些)和参数。

  2. 全局变量太可怕了。不要相信任何告诉你的人。我提供上面的建议来帮助解决您的问题,但更好的解决方案是弄清楚如何重构代码,以便您可以避免需要全局变量。 (IMO单身人士也不是答案。用于访问全球数据的单身人士不仅仅是花哨的全球变数。)

答案 1 :(得分:0)

你应该保留字符串,如。

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

现在尝试在外面访问。