2010-04-21 107 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