2011-09-09 7 views
3

이것은 아마도 매우 기본적인 질문이라고 생각하지만 몇 시간 동안 검색하면 문제가있는 사람들을 찾을 수 있지만 찾은 해결책이 없습니다.UIPickerView ios 문제 - 인식 할 수없는 선택기

안드로이드와 블랙 베리 애플 리케이션을 작성했지만, 아이폰 개발에 젖어 먹고있는 중이므로 Objective-C는 자바의 전환점입니다.

[UIViewController에 numberOfComponentsInPickerView :] : 인식 할 수없는 선택기 인스턴스에 전송 0x4b4e0d0 2011-09- 나는 그것에 UIPickerView으로 화면을 열 때

모든

먼저,이 오류 메시지가 09 15 : 57 : 19.619 TabBar의 [4945 : 207] 의한 캐치되지 않는 예외 'NSInvalidArgumentException'이유 응용 프로그램 종료 *이 -

H '[UIViewController에 numberOfComponentsInPickerView는 :] 미정 선택기 인스턴스 0x4b4e0d0 전송' 여기

#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 

, 그리고 대리인과는 dataSource 모두 파일의 소유자에 연결되어 있습니다. 내가 놓친 게 있니?

감사합니다.

답변

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로 연결했다면 연결해야합니다. 코드에서 IBOutlet으로 pickerView를 찾을 수 있습니다.

관련 문제