2011-09-09 25 views
3

我认为这可能是一个非常基本的问题,但经过几个小时的搜索后,我可以找到一些与我的问题的人,但没有找到工作的解决方案。UIPickerView ios问题 - 无法识别的选择器

虽然我已经编写了Android和Blackberry应用程序,但我刚刚开始使用iPhone开发,所以Objective-C与Java有点相似。

首先,当我试图与它一个UIPickerView打开屏幕,我收到此错误信息:

[UIViewController中numberOfComponentsInPickerView:]:无法识别的选择发送到实例0x4b4e0d0 2011-09- 09 15:57:19.619的TabBar [4945:207] *终止应用程序由于未捕获的异常 'NSInvalidArgumentException',原因: ' - [UIViewController中numberOfComponentsInPickerView:]:无法识别的选择发送到实例0x4b4e0d0'

ħ ERE是我的头文件:

#import <UIKit/UIKit.h> 

@interface ThirdViewController : UIViewController <UIPickerViewDelegate,  UIPickerViewDataSource>{ 
UILabel *setUnits; 
UIPickerView *pickerView; 
NSMutableArray *pickItems; 
} 
@property (retain, nonatomic) UIPickerView *pickerView; 
@property (retain, nonatomic) NSMutableArray *pickItems; 

@end 

这里是我的执行文件:

#import "ThirdViewController.h" 

@implementation ThirdViewController 

@synthesize pickerView; 
@synthesize pickItems; 

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

- (void)didReceiveMemoryWarning 
{ 
    // Releases the view if it doesn't have a superview. 
    [super didReceiveMemoryWarning]; 

    // Release any cached data, images, etc that aren't in use. 
} 

#pragma mark - View lifecycle 

/* 
// Implement loadView to create a view hierarchy programmatically, without using a nib. 
- (void)loadView 
{ 
} 
*/ 

// Implement viewDidLoad to do additional setup after loading the view, typically from a  nib. 
- (void)viewDidLoad { 
    [super viewDidLoad]; 

    pickItems = [[NSMutableArray alloc] init]; 
    [pickItems addObject:@"Pounds"]; 
    [pickItems addObject:@"Kilograms"]; 
} 

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { 

    return 1; //give components here 
} 

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent: (NSInteger)component { 

    return [pickItems count]; //give rows here 
} 

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { 
    return [pickItems objectAtIndex:row]; // give titles 
} 

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { 
    //Do the step here 
} 

- (void)dealloc { 
    [super dealloc]; 
} 
@end 

我已经查看过,无论是委托和数据源连接到文件的所有者。我错过了什么吗?

谢谢。

回答

2

我怀疑在Interface Builder/xib文件中,您需要将您的UIViewController类更改为ThirdViewController类。在任何情况下,错误消息都会告诉您,您正在将消息发送给UIViewController实例,而不是您创建的子类的实例。常见的(但不是唯一的)原因是IB/xib设置 - 但是您也是通过编程来编写错误。 (使用IB/xib很容易,即使您已经使用iOS一段时间。)

+0

我将IB中的类更改为ThirdViewController类,并修复它。谢谢! – coder

1

当您拨打numberOfComponentsInPickerView:时,看起来您正在调用UIViewController的实例,而不是ThirdViewController的实例。如果有必要,可以使用viewController来确保编译器知道它是后者的一个实例。

+1

正确的诊断,但这里的错误是运行时不编译时间。或者我是愚蠢的? – Obliquely

2

您在初始化pickerView的位置?如果你正在做xib,那么它应该连接,我可以在你的代码中找到pickerView作为IBOutlet。

相关问题