2011-09-09 9 views
3

これはおそらく非常に基本的な質問ですが、数時間の検索の後に私の問題を抱える人がいますが、私が見つけた解決策はありません。UIPickerView iosの問題 - 認識されていないセレクタ

私はAndroid開発とBlackberryアプリを書いていますが、私は自分の足を濡らしているだけなので、Objective-CはJavaのスイッチです。

まず第一に、私はそれにUIPickerViewで画面を開こうとすると、私はこのエラーメッセージを取得:

[のUIViewController numberOfComponentsInPickerViewを:]:認識されていないセレクタはインスタンスに0x4b4e0d0 2011-09-を送りました09 15:57:19.619のTabBar [4945:207]によりキャッチされない例外 'NSInvalidArgumentException'、理由にアプリを終了*: ' - [のUIViewController numberOfComponentsInPickerViewは:]:認識されていないセレクタがインスタンス0x4b4e0d0に送ら'

H 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の設定ですが、プログラムでもエラーが発生します。 (あなたがしばらくiOSを使用していたとしても、IB/xibで簡単に行うことができます)

+0

私はIBのクラスをThirdViewControllerクラスに変更し、それを修正しました。ありがとう! – coder

1

numberOfComponentsInPickerView:に電話すると、UIViewControllerのインスタンスで呼び出され、ThirdViewControllerのインスタンスではないようです。必要に応じて、viewControllerをキャストして、コンパイラが後者のインスタンスであることをコンパイラが認識していることを確認します。

+1

診断は正しく行われましたが、ここでのエラーは実行時にコンパイルされていません。または私は冗談ですか? – Obliquely

2

ここでは、pickerViewを初期化していますか? xibで接続している場合は、コード内でIBOutletとしてpickerViewを見つけることができます。