2013-04-09 54 views
-3

进出口使用的zbar和阅读器SDK简单,如果在Xcode中陈述

.H

#import <UIKit/UIKit.h> 

@interface ViewController : UIViewController 
// ADD: delegate protocol 
<ZBarReaderDelegate> 
{ 
UIImageView *resultImage; 
UITextView *resultText; 
UILabel *text; 
} 
@property (nonatomic, retain) IBOutlet UIImageView *resultImage; 
@property (nonatomic, retain) IBOutlet UITextView *resultText; 
@property (nonatomic, retain) IBOutlet UILabel *text; 
- (IBAction) scanButtonTapped; 

@end 

UITextView *resultText; 
IBOutlet UILabel *text; 

.M

#import "ViewController.h" 

@interface ViewController() 

@end 

@implementation ViewController 

@synthesize resultImage, resultText, text; 

- (IBAction) scanButtonTapped 
{ 
// ADD: present a barcode reader that scans from the camera feed 
ZBarReaderViewController *reader = [ZBarReaderViewController new]; 
reader.readerDelegate = self; 
reader.supportedOrientationsMask = ZBarOrientationMaskAll; 

ZBarImageScanner *scanner = reader.scanner; 
// TODO: (optional) additional reader configuration here 

// EXAMPLE: disable rarely used I2/5 to improve performance 
[scanner setSymbology: ZBAR_I25 
       config: ZBAR_CFG_ENABLE 
        to: 0]; 

// present and release the controller 
[self presentModalViewController: reader 
         animated: YES]; 

} 





- (void) imagePickerController: (UIImagePickerController*) reader 
didFinishPickingMediaWithInfo: (NSDictionary*) info 
{ 
// ADD: get the decode results 
id<NSFastEnumeration> results = 
[info objectForKey: ZBarReaderControllerResults]; 
ZBarSymbol *symbol = nil; 
for(symbol in results) 
    // EXAMPLE: just grab the first barcode 
    break; 

// EXAMPLE: do something useful with the resulting data 
resultText.text = symbol.data; 


//Below are the IF Statements... 
if ((symbol = @"3307210410801")) { 
    text.text = @"FarCry 2"; 
} 
else if ((symbol = @"530917119347")) { 
    text.text = @"Call of Duty: Black Ops 2"; 
} 
else if ((symbol = @"5021290053694")) { 
    text.text = @"Hitman Absolution"; 
} 
else if ((symbol = @"5026555401739")) { 
    text.text = @"Red Dead Redemption"; 
} 




// EXAMPLE: do something useful with the barcode image 
resultImage.image = 
[info objectForKey: UIImagePickerControllerOriginalImage]; 

// ADD: dismiss the controller (NB dismiss from the *reader*!) 
[reader dismissModalViewControllerAnimated: YES]; 
} 




- (void) dealloc 
{ 
self.resultImage = nil; 
self.resultText = nil; 
self.text = nil; 


} 


- (BOOL) shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation) interfaceOrientation 
{ 
return(YES); 
} 

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
// Do any additional setup after loading the view, typically from a nib. 
} 

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

@end 

它的工作原理,这样当resultText显示在我的模拟器为5021290053694,然后'文字'显示“Pingu”

我的问题是Pingu在下一个数字出现时不会消失,所以当50 26555401739显示“文字”应显示“死亡肖恩”。相反,它仍然是Pingu。

换句话说,它不会取消分配首先显示的任何“文本”。第一个将留在那里,直到我关闭应用程序并重新打开。

希望这很容易理解。 :)

预先感谢您。

  • 尼克

编辑

回答

3

你不应该比较字符串直接这样。它将比较引用而不是值。使用[symbol isEqualToString:@"3307210410801"]代替

+0

感谢您的回复迅速即时得到“的ZBarSymbol没有明显@interface声明选择器“isEqualToString。” 我编辑了我的问题,以显示更多的即时通讯工作。 干杯 – 2013-04-09 16:33:47

2

您正在使用=这是一个赋值运算符。

==是一个比较运算符。

但是比较需要isEqualTo:两个对象,它如果是字符串,你应该做的isEqualToString:

你的代码应该是:

if ([symbol isEqualToString:@"3307210410801"]) { 
    text.text = @"LOTR"; 
} 
else if ([symbol isEqualToString: @"530917119347"]) { 
    text.text = @"James Bond"; 
} 
else if ([symbol isEqualToString: @"5021290053694"]) { 
    text.text = @"Pingu"; 
} 
else if ([symbol isEqualToString: @"5026555401739"]) { 
    text.text = @"Shaun of the Dead"; 
} 
+0

我得到了'No Visible @interface for ZBarSymbol声明了选择器“isEqualToString。” 我在编辑问题以更好地理解我的实现文件的外观。 感谢您的迅速回复 – 2013-04-09 16:26:19

+1

获取字符串中的文本,然后使用isequaltostring: – 2013-04-09 16:32:14

+0

ur zbarsymbol是某种自定义对象....将其字符串值取出。 – 2013-04-09 16:39:36