2010-04-21 111 views
1

我是iPhone開發新手。我將日期轉換爲所需的格式,並將其設置爲委託並在另一個視圖中獲取其值。當我嘗試從代理獲取值時,會話重新啓動。如果我在集合委託中設置原始日期而不是格式化日期,那麼我能夠在另一個視圖中獲取該值。如果我也給任何靜態字符串值,那麼我也能夠回到靜態字符串值。只有設置了字符串的格式化日期纔會重新啓動會話。如果我打印,檢查格式的日期的價值它打印正確的格式化的日期only.Please幫我out.Here是我的日期轉換代碼代表無法正常工作

NSString *dateval=[[stories objectAtIndex: storyIndex] objectForKey:@"date"]; 

NSDateFormatter *inputFormatter = [[NSDateFormatter alloc] init]; 

[inputFormatter setDateFormat:@"EEE, MMM dd, yyyy"]; 

NSDate *inputDate = [inputFormatter dateFromString:dateval]; 

NSDateFormatter *outputFormatter = [[NSDateFormatter alloc] init]; 

[outputFormatter setDateFormat:@"MMMM dd"]; 

NSString *outputDate = [outputFormatter stringFromDate:inputDate]; 

AppDelegate *delegate=(AppDelegate *)[[UIApplication sharedApplication]delegate]; 

[delegate setCurrentDates:outputDate]; 

編輯: 這顯示在控制檯

內部視圖確實加載

[會話開始於2010-04-21 19:12:53 +0530。] GNU gdb 6.3.50-20050815(Apple版本gdb-967)(Tue Jul 14 02:11:58 UTC 2009) Copyright 2004 Free Software Foundation,Inc. GDB是免費軟件,涵蓋t他GNU通用公共許可證,並且你是 歡迎在特定條件下更改和/或分發它的副本。 輸入「show copying」查看條件。 GDB絕對沒有保修。請輸入「顯示保修」以瞭解詳情。 這GDB被配置爲「I386的蘋果達爾文」 .sharedlibrary應用負載規則所有附加 處理4216 (GDB)

另一種觀點認爲

- (void)viewDidLoad { 
NSLog(@"inside view did load"); 
AppDelegate *delegate=(AppDelegate *)[[UIApplication sharedApplication]delegate]; 
NSString *titleValue=[delegate getCurrentDates]; 
self.navigationItem.title =titleValue ; 
} 

的get不起作用如果我給任何靜態字符串或「dateval」,它工作正常。

謝謝。

+0

通過「會話重啓」,你的意思是應用程序崩潰?你會得到什麼錯誤?在其他視圖中顯示獲取值的代碼。 – DyingCactus 2010-04-21 13:37:45

回答

2

outputDate似乎不被保留,所以在事件循環結束時丟失了值(因爲NSAutoreleasePool)。

您應保留outputDate避免與委託類似的東西它的發行:

- (void)setCurrentDates:(NSString *)value { 
    [value retain]; // <- Retain new value 
    [date release]; // <- Release old value; 
    date = value; 
} 

最好的解決辦法是在與retain屬性的委託聲明的屬性。

+0

我已修復setter代碼以具有正確的保留/釋放順序。 – 2010-04-28 07:32:22

+0

我能夠從你以前的代碼本身瞭解你想說什麼。感謝它完美的作品。 – Warrior 2010-04-29 10:53:30