0

iOS 7 用の Xcode 5 でシンプルなラベルと UIPickerView を実装しました。コードは次の Web サイトのコードを使用しました。すべてが正しいようです。なぜ機能しないのかわかりません。

http://www.youtube.com/watch?v=CIhqiuG8p1k

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController {
    IBOutlet UILabel *label;
    IBOutlet UIPickerView *Picker;
    NSArray *PickerData;
}

@property (retain, nonatomic) IBOutlet UIPickerView *Picker;
@property (retain, nonatomic) NSArray *PickerData;
@end


#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController
@synthesize Picker,PickerData;

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    NSArray *array = [[NSArray alloc] initWithObjects:@"One",@"Two",@"Three",@"Four", nil];
    self.PickerData = array;
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

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

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

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

-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:  (NSInteger)component {
    int select = row;
    if (select == 0) {
        label.text = @"One Is Selected";
    } else if (select == 1) {
        label.text = @"Two Is Selected";
    } else if (select == 2) {
        label.text = @"Three Is Selected";
    } else if (select == 3) {
        label.text = @"Four Is Selected";
    }
}

@end
4

1 に答える 1

2

ここには 3 つの考えられる原因があり、すべて関連しています。

  1. ピッカー ビューは実際に存在しますか? このクラスのインターフェイスを定義する xib ファイルに追加しましたか?
  2. xib のピッカー ビューは、ピッカー ビュー ivar のアウトレットに接続されていますか? このような問題をデバッグするときは、self.PickerViewが実際にオブジェクトを指しているかどうかを確認することを常にお勧めします。オブジェクトが である場合はnil、接続していない可能性があり、コードは空の ivar に送信したメッセージを黙って破棄します。
  3. ピッカー ビューのデータソースとデリゲートのプロパティは、View Controller に接続されていますか? これが、ピッカー ビューがその内容を誰に要求するかを知る方法です。

また、Objective-C スタイルの余談として、変数、プロパティ、ivar は慣例により、小文字で始まる名前を持ち、クラスと構造体は大文字で始まります。この規則に従う必要はありませんが、そうすることで、他の人にとってコードが読みやすくなり、他の人のコードを読むのにも役立ちます。

于 2013-08-13T16:47:58.160 に答える