2013-07-30 43 views
1

我在一个文本框中的DatePicker在一行中出现问题我得到一个错误,我也不知道为什么。在文本框中的日期选择器不工作

我在.m中输入“@synthesize resDatum;”的错误。错误是:财产 'resDatum'(NSData的* ')不匹配的实例变量的类型 'resDatum'(' 的NSDate * _strong')

而且我不khnow为什么类型...

或者是否有更智能的解决方案在ios6>的文本字段中实现DatePicker?

这里我的.h:

#import <UIKit/UIKit.h> 
#import <MessageUI/MessageUI.h> 

@interface Reservieren : UIViewController <MFMailComposeViewControllerDelegate> { 

    NSDate *resDatum; 
    UIActionSheet *dateSheet; 

    IBOutlet UITextField *Anzahl; 
    IBOutlet UITextField *Nummer; 
    IBOutlet UISegmentedControl *draussendrinnen; 
    UITextField *Datum;  

    NSString *draussendrinnenstring;  
} 

@property (nonatomic, retain)IBOutlet UITextField *Anzahl; 
@property (nonatomic, retain)IBOutlet UITextField *Nummer; 
@property (nonatomic, retain) NSData *resDatum; 
@property (nonatomic, retain) IBOutlet UITextField *Datum; 

- (void)setDate; 
- (void)dismissDateSet; 
- (void)cancelDateSet; 

- (IBAction)Reservieren_zuruck:(id)sender; 
- (IBAction)textFieldReturn:(id)sender; 
- (IBAction)reservieren:(id)sender; 
- (IBAction)draussendrinnenauswahl:(id)sender; 

@end 

这里我.M

#import "Reservieren.h" 
#import "ViewController.h" 

@interface Reservieren() 

@end 

@implementation Reservieren 
@synthesize Anzahl, Nummer, Datum; 
@synthesize resDatum; //-->Type of property 'resDatum'(NSData *') does not match type of instance variable 'resDatum'('NSDate *_strong') 

-(void)setDate { 

    //NSLocale *deLocale = [[NSLocale alloc]initWithLocaleIdentifier:@"de_DE"]; 
    dateSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:nil cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil]; 
    [dateSheet setActionSheetStyle:UIActionSheetStyleBlackTranslucent]; 
    CGRect pickerFrame = CGRectMake(0, 44, 0, 0); 
    UIDatePicker *dateDayPicker = [[UIDatePicker alloc] initWithFrame:pickerFrame]; 
    [dateDayPicker setDatePickerMode:UIDatePickerModeDateAndTime]; 

    [dateSheet addSubview:dateDayPicker]; 

    UIToolbar *controlToolBar = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, dateSheet.bounds.size.width, 44)]; 

    [controlToolBar setBarStyle:UIBarStyleBlackTranslucent]; 
    [controlToolBar sizeToFit]; 

    UIBarButtonItem *spacer =[[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; 

    UIBarButtonItem *setButton = [[UIBarButtonItem alloc] initWithTitle:@"Auswählen" style:UIBarButtonItemStyleDone target:self action:@selector(dismissDateSet)]; 

    UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc]initWithTitle:@"Abbrechen" style:UIBarButtonItemStyleBordered target:self action:@selector(cancelDateSet)]; 

    [controlToolBar setItems:[NSArray arrayWithObjects:spacer, cancelButton, setButton, nil]animated:NO]; 

    [dateSheet addSubview:controlToolBar]; 
    [dateSheet showInView:self.view]; 
    [dateSheet setBounds:CGRectMake(0, 0, 320, 485)];   
} 


-(void)cancelDateSet {  
    [dateSheet dismissWithClickedButtonIndex:0 animated:YES]; 
} 

- (void)dismissDateSet { 
    NSArray *listOfViews = [dateSheet subviews]; 
    for (UIView *subView in listOfViews) { 
     if([subView isKindOfClass:[UIDatePicker class]]) { 
      self.resDatum = [(UIDatePicker *)subView date]; 
     } 
    }  

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init]; 
    [dateFormatter setDateFormat:@"dd.MM.yyyy h.mm"];  
    [Datum setText:[dateFormatter stringFromDate: self.resDatum]];  
    [dateSheet dismissWithClickedButtonIndex:0 animated:YES];  
} 

-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField { 
    [self setDate]; 
    return NO; 
} 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 
} 

- (void)viewDidUnload { 
    [self setDatum:nil]; 
    [super viewDidUnload]; 
} 
@end 
+0

只需尝试@property(非原子,强大)NSData * resDatum; ,不要写保留...让我知道它是否工作或不! – NiravPatel

+0

@NiravPatel - 'strong'是'retain'的同义词。它们在ARC下的行为相同。 –

回答

1

错误是你的resDatum变量的数据类型。请用NSDate代替NSData申报@property

二传手现在期待NSData而不是NSDate。请将其更改为NSDate

NSDate *resDatum; 
@property (nonatomic, retain) NSData *resDatum; 

它更改为

​​
+1

唉谢谢我看这个代码整个evenig,我没有看到日期和数据的错误-.- – Nils

+1

另一个问题:我怎样才能改变DatePicker格式的欧洲格式(德国)与Heute而不是今天? – Nils

+0

http://stackoverflow.com/questions/13952063/how-to-change-the-format-of-date-in-date-picker –

0

的错误是在不同类型的属性resDatum E中的可变resDatum:

NSDate *resDatum; 
@property (nonatomic, retain) NSData *resDatum; 

如果resDatum是日期(如名称所暗示的)变化NSDate中的属性类型(不是NSData)。

如果你使用@synthesize你不需要声明私有变量具有相同的名称,否则,如果您需要一个私有变量与属性的名称相同,但有不同的类型,你可以使用

@synthesize resDatum = _resDatum 
+0

Minor nitpick:在显式合成的属性上声明支持变量在OS X窗口出去10.5。您不会创建一个支持变量,您只需使用等号右侧的名称来声明所需的影子变量即可。 – CodaFi

+0

谢谢我没有看到这个错误-.- – Nils