2012-03-08 38 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