0

私のクラスで気になる点は次のとおりです。

.h

@interface TimerViewController : UIViewController <UITextFieldDelegate> {
    IBOutlet UITextField *hourField,*minuteField;
}

@property (strong, nonatomic) IBOutlet UITextField *hourField,*minuteField;

@end

.m

@implementation TimerViewController
@synthesize hourField,minuteField;

@end

私の問題は、アプリがこのログでクラッシュする前に、テキスト フィールドを複数回使用 (プロパティの取得と設定) できることです。

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason:
'-[__NSCFString setText:]: unrecognized selector sent to instance 0x1e1dafa0' 

これは、コードの[self.hourField setText:@"5"];実行時に発生します。[self.hourField isFirstResponder]同じタイプのログであるかどうかを確認するときにも発生する可能性があります。

コンソールは、テキスト フィールドを として認識します__NSCFString

ARC で動作し、私は常に合成アクセサーを使用しています。以前にこの問題が発生したことはなく、どこが間違っているのかわかりません。

4

1 に答える 1

1

問題は、変数の宣言方法との混乱である可能性があると思います。@synthesize ステートメントはもう必要ありません。通常は、プライベート iVar にプロパティ宣言とは異なるスペルを持たせたいと思うでしょう。これが問題かどうかを確認するには、@property 宣言と @synthesize の両方を削除し、hourField に単に [hourField setText:@"5"]; としてアクセスします。. もう 1 つの方法は、@synthesize と iVar 宣言を完全に削除することです。

他に、IBOutlet が .xib またはストーリーボードの正しい項目に接続されているかどうかを確認します。

于 2012-11-28T21:19:16.940 に答える