0

1 つのビューにバーコード スキャナーがあり、ユーザーがバーコードをスキャンした後、アプリはバーコード テキスト フィールドが事前に入力されている別のビュー (BoilerDetails) に移動します。

ViewController が表示されていない場合は null であり、UITextField テキストを直接変更できないことを理解しています。これまでのところ、エラーが発生しています.どうすれば修正できますか?

BarcodeScannerViewController.m

BoilerDetailsViewController *viewCtrl = [[BoilerDetailsViewController alloc] initWithNibName:nil bundle:nil];
[viewCtrl setBarcode:strBarcode];
[self.navigationController pushViewController:viewCtrl animated:YES];

BoilerDetailsViewController.h

@interface BoilerDetailsViewController : SubViewControllerBase
@property (retain, nonatomic) NSString *barcode;
@property (retain, nonatomic) IBOutlet UITextField *barcodeField;
- (void)setBarcode:(NSString*)strBarcode;
@end

BoilerDetailsViewController.m

-(void)setBarcode:(NSString *)strBarcode
{
    self.barcode = strBarcode;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    [_barcodeField setText:self.barcode];
    // Do any additional setup after loading the view from its nib.
}
4

3 に答える 3

2
-(void)setBarcode:(NSString *)strBarcode
{
    self.barcode = strBarcode;
}

これらの文字列は無限ループになると思います。ロジックによると、次を使用する必要があります。

-(void)setBarcode:(NSString *)strBarcode
{
    self.barcodeField.text = strBarcode;
}

また

@syntesize barcode = _barcode;

-(void)setBarcode:(NSString *)strBarcode
{
    [_barcode autorelease];
    _barcode = [strBarcode retain] //in case of no ARC
}

あなたが望むものに依存します(文字列を保存するか、ラベルを設定します)。

于 2013-02-19T14:53:13.943 に答える
0

barcodeViewDidload で andを合成するだけで、このコード[_barcodeField setText:barcode];を記述して実行できます。

于 2013-02-19T14:54:11.933 に答える
0

まずこれがまずい

-(void)setBarcode:(NSString *)strBarcode
{
    self.barcode = strBarcode;
}

self.barcode = strBarcode;それ自体がセッターを呼び出します。

iOSのバージョンに応じて、次のように書きます:

//for ARC environment
-(void)setBarcode:(NSString *)strBarcode
{
    _barcode = strBarcode;
}
//since default association in ARC is strong

これを行う前に@synthesize barcode = _barcode;

//and for non-ARC environment, since your property is retain type
-(void)setBarcode:(NSString *)strBarcode
{
    if (_barcode != barcode) {
        [_barcode release];
        _barcode = [barcode retain];
    }
}

そして、あなたは大丈夫です。

于 2013-02-19T14:58:03.990 に答える