2013-03-04 87 views
1

在我的模型對象,我指定這樣一個日期:靜態NSDateFormatter總是零

static NSDateFormatter *dateFormat = nil; 
if (nil == dateFormat) { 
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
    [dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 
} 

dateCreated = [dateFormat dateFromString:@"2013-03-04 09:16:41"]; 

我所看到的是,dateFormat總是nil;因此,dateCreated設置爲nil。不知道如何去調試這...

+0

爲什麼你想要的日期格式爲靜態? – 2013-03-04 14:41:28

+0

下面是關於'static'關鍵字的一個很好的解釋:http://stackoverflow.com/a/572550/620197 – 2013-03-04 14:49:11

+0

我讀過關於重用靜態格式化器的問題([示例](http://stackoverflow.com/questions)/4453550/iphone-SDK-最佳實踐換用-nsdateformatter合的cellForRowAtIndexPath))。在我的情況下,這個NSDateFormatter將被重新創建數千次,所以我們的目標是減少這個開支。 – davidm 2013-03-04 14:51:01

回答

10

問題在於您在if語句中引入了另一個非staticdateFormat變量。

試試這個:

static NSDateFormatter *dateFormat = nil; 
if (nil == dateFormat) { 
    dateFormat = [[NSDateFormatter alloc] init]; // NOT NSDateFormatter *dateFormat = ... 
    [dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 
} 
+0

+1解決方案正確 – 2013-03-04 14:51:21

2

原因NSDateFormatter不nill是在開始static關鍵字,關鍵字static初始化NSDateFormatter零隻有一次,當你檢查NSDateFormatter後面的代碼,這是從來沒有無

+1

'靜態'做什麼? – trojanfoe 2013-03-04 14:43:07

+0

它初始化'NSDateFormatter'只會在應用程序中嘗試訪問它一次,然後在任何時候它將永遠不會爲零 – nsgulliver 2013-03-04 14:45:30

+1

我仍然不明白你的意思。這不是OP的問題;他只是在不同的作用域使用了兩個相同名稱的變量...... – trojanfoe 2013-03-04 14:46:22