2012-03-08 39 views
0
//h file 

struct runSTRUCT{ 
    NSDate *RunDateTime; 
} ; 

//m file 

struct runSTRUCT run; 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    dateFormatter.timeStyle = NSDateFormatterNoStyle; 
    [dateFormatter setDateFormat:@"MM/dd/yyyy HH:mm"]; 
    run.RunDateTime = [dateFormatter dateFromString:@"12/02/2012 12:22"]; 
    NSString *dateTimeStr = [dateFormatter stringFromDate:run.RunDateTime]; 
    [dateFormatter release]; 
} 

这一切正常。然后当我点击一个按钮并从日期开始创建一个字符串时,它会给我EXC_BAD_ACCESS。结构中的NSDate可能会发生内存泄漏

-(IBAction)respondButtonPressed:(id)sender{ 
    NSDateFormatter *dateFormatter2 = [[NSDateFormatter alloc] init]; 
    dateFormatter2.timeStyle = NSDateFormatterNoStyle; 
    [dateFormatter2 setDateFormat:@"MM/dd/yyyy HH:mm"]; 
    NSString *dateTimeStr = [dateFormatter2 stringFromDate:run.RunDateTime]; 
    [dateFormatter2 release]; 
} 

当我看在控制台和打印的说明,一般显示了两个1件事:

  1. 正在调试的程序信号,同时在从GDB调用的函数。 GDB已将上下文恢复到调用之前的状态。 要更改此行为,请使用“set unwindonsignal off” 对包含函数(CFShow)的表达式的评估将被废弃。 正在调试的程序在从GDB调用的函数中发出信号。 GDB已将上下文恢复到调用之前的状态。 要更改此行为,请使用“set unwindonsignal off” 对包含函数(CFShow)的表达式的评估将被废弃。

  2. 或者“run.runDateTime”是一些随机变量

编辑:我不知道如果我在正确的地方放这些,因为它仍然无法正常工作(我可能没)。

- (void)viewDidLoad { 
     [super viewDidLoad]; 
     NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
     dateFormatter.timeStyle = NSDateFormatterNoStyle; 
     [dateFormatter setDateFormat:@"MM/dd/yyyy HH:mm"]; 
     run.RunDateTime = [dateFormatter dateFromString:@"12/02/2012 12:22"]; 
     NSString *dateTimeStr = [dateFormatter stringFromDate:run.RunDateTime]; 

    [run.RunDateTime retain]; 

     [dateFormatter release]; 
} 

-(IBAction)respondButtonPressed:(id)sender{ 
    NSDateFormatter *dateFormatter2 = [[NSDateFormatter alloc] init]; 
    dateFormatter2.timeStyle = NSDateFormatterNoStyle; 
    [dateFormatter2 setDateFormat:@"MM/dd/yyyy HH:mm"]; 
    NSString *dateTimeStr = [dateFormatter2 stringFromDate:run.RunDateTime]; 

    [dateFormatter2 release]; 
} 

我也有一对NSString在结构中,他们工作正常。

+1

run - > RunDateTime ...试试这个。这是您通常如何访问结构中的数据。 – 2012-03-08 15:13:14

+0

这似乎并没有工作。 run-> RunDateTime并运行 - > RunDateTime都提出了'无效类型参数' - >' – Kevin 2012-03-08 16:31:12

+0

您只需要在viewDidLoad方法中保留。 – lnafziger 2012-03-08 17:01:52

回答

2

从日期格式化程序中分配/创建它后,您需要保留RunDateTime。

[run.RunDateTime retain]; 

请确保将它释放到您的dealloc!

+0

它的工作原理!非常感谢!我忘了保留另一个变量所以它现在的作品,谢谢! – Kevin 2012-03-08 20:47:00