1

私は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
}
4

2 に答える 2

2

試してみてください: birdColors = [[NSArray alloc] initWithObjects:@"Blue",@"Yellow",@"Red",nil]; 代わりにbirdColors = [NSArray arrayWithObjects:@"Blue",@"Yellow",@"Red",nil];

于 2011-03-30T23:24:30.023 に答える
0

pickerViewの場合と同様に、birdColorsもプロパティ(非アトミック、保持)にします。配列が保持されていないため、ゾンビメモリにアクセスしています。実行可能ファイルのプロパティ/一般パネルでNSZombieEnabled=YESを設定します。これにより、アクセスされているものが正確にわかります。

于 2011-03-30T20:23:09.557 に答える