0

我在一个视图上有一个条形码扫描仪,在用户扫描条形码后,应用程序将他们带到另一个视图(BoilerDetails),其中条形码文本字段已预先填写。

我知道 viewcontroller 在没有出现时为空,我无法直接更改 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

您只需barcode在 ViewDidload 中合成并编写此代码[_barcodeField setText:barcode];即可。

于 2013-02-19T14:54:11.933 回答
0

首先,这是错误的

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

self.barcode = strBarcode;本身调用setter。

取决于你写的 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 回答