UIPickerView IOS проблемы - нераспознанный селектор - PullRequest
3 голосов
/ 10 сентября 2011

Я думаю, что это, вероятно, очень элементарный вопрос, но после нескольких часов поиска я могу найти людей с моей проблемой, но ни одно из решений, которые я нашел, не сработало.

Я только получаю свойНо я уже пишу приложения для Android и Blackberry, так что Objective-C немного отличается от Java.

Во-первых, когда я пытаюсь открыть экран с UIPickerView наэто, я получаю это сообщение об ошибке:

[UIViewController numberOfComponentsInPickerView:]: нераспознанный селектор отправлен в экземпляр 0x4b4e0d0 2011-09-09 15: 57: 19.619 TabBar [4945: 207] * Завершение работы приложения из-за необработанного исключения «NSInvalidArgumentException», причина: '- [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
*1013* *1014*

А вот мой файл реализации:

#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

Я проверил, и делегат, и источник данных подключены кВладелец электронного файла.Я что-то упустил?

Спасибо.

Ответы [ 3 ]

2 голосов
/ 10 сентября 2011

Я подозреваю, что в файле Interface Builder / xib вам нужно изменить класс UIViewController на класс ThirdViewController. В любом случае сообщение об ошибке говорит вам, что вы отправляете сообщение в экземпляр UIViewController, а не в экземпляр созданного вами подкласса. Распространенной (но не единственной) причиной являются настройки IB / xib, но вы также делаете ошибку программно. (С IB / xib это легко сделать, даже если вы уже давно используете iOS.)

2 голосов
/ 10 сентября 2011

Где вы инициализируете свой pickerView? если вы работаете с xib, то он должен быть подключен, я могу найти pickerView как IBOutlet в вашем коде.

1 голос
/ 10 сентября 2011

Когда вы вызываете numberOfComponentsInPickerView:, кажется, что вы вызываете его для экземпляра UIViewController, а не для экземпляра ThirdViewController. При необходимости приведите viewController, чтобы убедиться, что компилятор знает, что он является экземпляром последнего.

...