UIPickerView аварийно завершает работу приложения при прокрутке мимо начала или конца списка - PullRequest
1 голос
/ 31 марта 2011

Я новичок в разработке для iOS, так что это, вероятно, легко исправить. У меня есть собственный контроллер представления, в котором я принимаю протоколы для управления UIPickerView в кончике. Все работает нормально, если в симуляторе iPad я не прокручиваю средство выбора за первым элементом в списке или последним элементом в списке и выпускаю. Вызывает следующую ошибку:

Поток 1: Программа получила сигнал: "EXC_BAD_ACCESS"

в этой строке моего класса main.m:

int retVal = UIApplicationMain (argc, argv, nil, nil);

Соответствующий код следует:

ViewController.h

@interface BirdColorViewController : UIViewController <UIPickerViewDelegate, UIPickerViewDataSource> {
IBOutlet UIPickerView *birdColorPicker;
NSArray *birdColors;
}

@property (nonatomic,retain) IBOutlet UIPickerView *birdColorPicker;

Viewcontroller.m

- (void)dealloc
{
[birdColorPicker release];
[super dealloc];
}

...

- (void)viewDidLoad
{
    [super viewDidLoad];
    birdColors = [NSArray arrayWithObjects:@"Blue",@"Yellow",@"Red",nil];

    birdColorPicker.delegate = self;
    birdColorPicker.dataSource = self;
}

...

#pragma mark - UIPickerViewDataSource methods

//(UIPickerView *)thePickerView

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
    return 1;
}

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component 
{
    return [birdColors count];
}

 #pragma mark - UIPickerViewDelegate methods

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

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component 
{
    // Set value in prefs/model
}

Ответы [ 2 ]

2 голосов
/ 31 марта 2011

Попробуйте: birdColors = [[NSArray alloc] initWithObjects:@"Blue",@"Yellow",@"Red",nil]; вместо birdColors = [NSArray arrayWithObjects:@"Blue",@"Yellow",@"Red",nil];

0 голосов
/ 31 марта 2011

Сделайте birdColors свойством также (неатомным, сохраняемым), как вы делаете с помощью pickerView.Ваш массив не сохраняется, поэтому вы получаете доступ к памяти зомби.Установите NSZombieEnabled = YES в панели свойств / общих параметров вашего исполняемого файла.Это точно скажет вам, к чему обращаются.

...