2013-07-28 13 views
0

我有一個視圖控制器與日期選擇器,並將變量設置爲選擇日期。變量消滅dismissViewController

當我關閉視圖控制器時,變量爲零。

有什麼建議嗎?當「完成」

DatePickerView代碼被按下(NSLogs顯示日期被分配到變量):當我檢查的日期賦予

-(void)done:(id)sender 
{ 
    [self dismissViewControllerAnimated:YES completion:nil]; 

    AddEditFixturesTableViewController *fixtures = [[AddEditFixturesTableViewController alloc]init]; 

    fixtures.fixtureDateTime = pickerDateTime; 

    NSDateFormatter *formatter = [[NSDateFormatter alloc]init]; 
    [formatter setDateFormat:@"dd-MM-yyyy"]; 
    NSString *pickerDateTimeString = [formatter stringFromDate:pickerDateTime]; 
    NSLog(@"Picker Date: %@", pickerDateTimeString); 
    NSString *fixturesDateTimeString = [formatter stringFromDate:[fixtures fixtureDateTime]]; 
    NSLog(@"Fixture Date: %@", fixturesDateTimeString); 
} 

代碼(NSLogs顯示變量是空的):

DatePickViewController *pickerView = [[DatePickViewController alloc]init]; 

NSDateFormatter *formatter = [[NSDateFormatter alloc]init]; 
[formatter setDateFormat:@"dd-MM-yyyy"]; 
NSString *fixturesDateTimeString = [formatter stringFromDate:fixtureDateTime]; 
NSLog(@"Fixture Date: %@", fixturesDateTimeString); 
NSString *pickerDateTime = [formatter stringFromDate:[pickerView pickerDateTime]]; 
NSLog(@"Picker Date: %@", pickerDateTime); 
+0

你如何得到'pickerDateTime'? 'pickerDateTime = [_picker date]'? –

+0

當picker值發生變化時,pickerDateTime = picker.date; –

+0

它看起來像一切都好,我認爲你的DataPickViewController和這裏沒有顯示的代碼錯誤有錯誤。如果你願意,把你的.h和.m文件發給我。 –

回答

0

你錯就錯在下面的代碼:

AddEditFixturesTableViewController *fixtures = [[AddEditFixturesTableViewController alloc]init]; 
fixtures.fixtureDateTime = pickerDateTime; 

在這裏,您初始化NE w AddEditFixturesTableViewController對象併爲其設置屬性。但是你必須將它設置爲你的存在對象。所以你必須使用委派。

首先你必須做的是添加協議。添加以下到您的DatePickViewController.h:

@protocol DatePickViewControllerDelegate <NSObject> 

- (void)setNewDate:(NSDate *)date; 

@end 

@interface DatePickViewController : UIViewController 

{ 
    IBOutlet UIDatePicker *datePicker; 
} 

@property (nonatomic, weak) id<DatePickViewControllerDelegate> delegate; 
@property (nonatomic, strong) IBOutlet UIDatePicker *datePicker; 
@property (nonatomic, strong) NSDate *pickerDateTime; 

-(IBAction)done:(id)sender; 
-(IBAction)dateChanged:(id)sender; 

@end 

現在解決您的done:方法。

- (void)done:(id)sender 
{ 
    [self dismissViewControllerAnimated:YES completion:nil]; 

    if (_delegate) { 
     [_delegate setNewDate:pickerDateTime]; 
    } 

    NSDateFormatter *formatter = [[NSDateFormatter alloc]init]; 
    [formatter setDateFormat:@"dd-MM-yyyy"]; 
    NSString *pickerDateTimeString = [formatter stringFromDate:pickerDateTime]; 
    NSLog(@"Picker Date: %@", pickerDateTimeString); 
    NSString *fixturesDateTimeString = [formatter stringFromDate:[fixtures fixtureDateTime]]; 
    NSLog(@"Fixture Date: %@", fixturesDateTimeString); 
} 

在你的AddEditFixturesTableViewController接口中添加委託方法。

@interface AddEditFixturesTableViewController : UITableViewController <UITextFieldDelegate, UITextViewDelegate, DatePickViewControllerDelegate> 

@property (nonatomic, strong) NSDate *fixtureDateTime; 

@property (nonatomic, strong) IBOutlet UILabel *label; 
- (IBAction)setDate:(id)sender; 
- (void)setNewDate:(NSDate)date; 

@end 

最後加的委託方法實現:

- (void)setNewDate:(NSDate *)date 
{ 
    fixtureDateTime = date; 
} 

它會幫助你。祝你好運!

+0

感謝您的幫助 - 但導致應用程序崩潰。 –

+0

非常感謝。然而,我不需要在我的應用程序的其他任何地方執行此操作,而且我也完成了相同的操作,但是使用了放鬆的細節。 –