2011-09-30 75 views
0

我正在创建一个textField,点击后UIPickerView出现。 当我运行此代码时出现错误: Thread 1:Profram received signal:"SIGABRT"Popup UIPickerView(iphone)

我对iPhone的开发很新,但负责人不在,我正在接受一个项目。

如果你可以让我知道什么是不对的......

这是ViewController.h的样子:

#import <UIKit/UIKit.h> 

@interface ViewController : UIViewController { 

IBOutlet UIPickerView *picker; 
IBOutlet UITextField *text; 

} 


- (IBAction)showPicker:(id)sender; 


@end 

ViewController.m

#import "ViewController.h" 
@implementation ViewController 
- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Release any cached data, images, etc that aren't in use. 
} 

#pragma mark - View lifecycle 

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

- (void)viewDidUnload 
{ 
    [super viewDidUnload]; 
    // Release any retained subviews of the main view. 
    // e.g. self.myOutlet = nil; 
} 

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
} 

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 
} 

- (void)viewWillDisappear:(BOOL)animated 
{ 
    [super viewWillDisappear:animated]; 
} 


- (void)viewDidDisappear:(BOOL)animated 
{ 
[super viewDidDisappear:animated]; 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
// Return YES for supported orientations 
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { 
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown); 
} else { 
    return YES; 


} 
} 

- (void)showPicker { 

[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:0.4]; 
[UIView setAnimationDelegate:self]; 
picker.center = CGPointMake(160, 240); 
[UIView commitAnimations]; 


if (!self.navigationItem.rightBarButtonItem) { 
    UIBarButtonItem *doneButton = [[UIBarButtonItem alloc]  initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(done:)]; 
    [self.navigationItem setRightBarButtonItem:doneButton animated:YES]; 
    // [doneButton release]; 
} 
} 


- (void)hidePicker { 

[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:0.4]; 
[UIView setAnimationDelegate:self]; 
picker.center = CGPointMake(160, 240); 
[UIView commitAnimations]; 


[self.navigationItem setRightBarButtonItem:nil animated:YES]; 
} 


- (void)done:(id)sender { 

[self hidePicker]; 

[self.navigationItem setRightBarButtonItem:nil animated:YES]; 
} 


- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { 

[self showPicker]; 

return NO; 
} 

回答

0
- (IBAction)showPicker:(id)sender; 

这函数没有在你的.m文件中实现,而不是 - (void)showPicker使用上面的那个...

,什么是使用这个......

- (void)done:(id)sender 
0

选择器视图必须有一个数据源获取数据,以显示和委托对事件作出回应。通常我会通过采用相应的协议UIPickerViewDelegate和UIPickerViewDataSource来定义控制器。你的控制器没有,这可能意味着数据源和委托在另一个对象内。你应该检查界面生成器,紧紧点击选择器,看看他的代表和数据源。如果你发现另一个类比你的控制器,那么你应该寻找错误。如果你发现你的控制器的类,那么问题是你没有实现用于填充选择器视图的方法。作为参考,拾取器至少在寻找数据源方法:

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView 
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component 
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view 

为狩猎运气好。