zxing文档版

今天要用到二维码扫描的功能,将之前做的一个可以正确运行的demozxing移植到新工程,却出现了iostream file notfound的问题。以下为解决办法。

参考以下文章可以完成将zxing加入到xcode中。

其实主要有几个步骤:

1、下载zxing2.1代码库后http://code.google.com/p/zxing/downloads/list,解压。将iphone目录和cpp复制到工程的目录里。要与工程的.xcodeproj文件同一级。

2、打开自己的工程,iphone/ZXingWidget目录下的ZXingWidget.xcode文件拖拽添加到项目中

3设置自己项目的Link Binary With Libraries

TARGETS ->Build Phases -> Link Binary With Libraries

点击+,添加libZXingWidget.a

4、设置自己项目的Target Dependencies

TARGETS ->Build Phases -> Target Dependencies

点击+,添加ZXingWidget

 

5、设置Header Search Paths

TARGET ->Build Settings -> Search Paths -> Header Search Paths

添加“./iphone/ZXingWidget/Classes相对路径,选择recursive

添加“./cpp/core/src相对路径,选择non-recursive

6、导入iOS框架

TARGETS ->Build Phases -> Link Binary With Libraries

点击+,添加AVFoundationAudioToolboxCoreVideoCoreMedialibiconvAddressBookAddressBookUI

7、修改使用的那个.m文件的后缀为.mm

     在这个.mm文件前面加入类引用

    

#import <ZXingWidgetController.h>

#import <QRCodeReader.h>

 

     在接口申明后面加入委托:

@interface HomeViewController ()<ZXingDelegate>

- (void)loadFunModelPanels;

@end

 

使用方法一
ZXing
直接提供了一个扫描二维码的ViewController,即ZXingWidgetController。在

需要扫描的时候,调用如下代码即可:
- (IBAction)scanCode:(id)sender{s

    ZXingWidgetController *widController = [[ZXingWidgetControlleralloc] initWithDelegate:selfshowCancel:YESOneDMode:NO];

    NSMutableSet *readers = [[NSMutableSetalloc ] init];

   QRCodeReader* qrcodeReader = [[QRCodeReader alloc] init];

   [readers addObject:qrcodeReader];

   widController.readers = readers;

    [selfpresentModalViewController:widController animated:YES];

}

ZXing扫描有结果时,会调用如下回调函数:

1 @protocolZXingDelegate
2 - (void)zxingController:(ZXingWidgetController*)controllerdidScanResult:(NSString *)result;
3 - (void)zxingControllerDidCancel:(ZXingWidgetController*)controller;
4 @end

 

 

以下可能遇到的一些编译问题:

1.如果你项目中使用了zxing,但是在xcdoe升级到4.5以后出现Incompatible pointer types sending'Class' (aka 'Class *') to parameter of type 'id<NSCopying>'错误,解决办法:重新下载更新版本的ZXing可以使用命令下载最新版本:svncheckout http://zxing.googlecode.com/svn/trunk/ zxing-read-only

2.如果出现了问题Undefined symbols for architecturei386"std::string::c_str() const", referenced from。。。。,

将你项目中的Apple LLVM compiler 4.1 - language中的 c Language Dialectc++ Language Dialectc++ standard Library设置成下图所选的值。参考http://stackoverflow.com/questions/12665457/zxing-in-xcode-4-5-and-ios-6

3.编译成功往真机上装的时候出现Choose a destination with a supportedarchitecture in order to run on this device ,由于ios设备不支持armv7s,所以必须将Architectures设置为armv6,但是仅仅需要改动valid architectures就行,不要改动architectures,否则容易引起真机不运行。把architectures改为$(ARCHS_STANDARD_32_BIT)就可以撞到手机上了。见http://blog.sina.com.cn/s/blog_90a0ad8d01013uuh.html

4:XCode 手贱升级到了 4.6  ZXingSDK  编译不过去了.

出现什么变量声明了没有使用的编译错误提示(可是明明使用了):

Member initializer 'bits_' does not name anon-static data member or base class

谷歌老外牛人多啊,或者说老外也遇到这个问题了,然后提问了,问答地址如下:

http://code.google.com/p/zxing/issues/detail?id=1494

里面说到将 ZXingWidget - BuildSettings - Other WarningFlags 里的 -Werror -Wno-unused-parameter 去掉,

但其实只要去掉 -Werror 就可以了, 如果 -Wno-unused-parameter  这个也去掉了会产生很多变量没有使用的警告.

此时可以编译通过了,烦恼的是  也有少许警告.

5.如果错误如下图所示,则将armv7s删除:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ZXing一维码/二维码 使用文档 样例: System.IO.Stream stmYiWei = new System.IO.MemoryStream(); BitMatrix byteMatrix = new MultiFormatWriter().encode(sCode, BarcodeFormat.CODE_39, 230, 40); toBitmap(byteMatrix).Save(stmYiWei, ImageFormat.Bmp); Byte[] byteYiWei = new byte[stmYiWei.Length]; stmYiWei.Position = 0; stmYiWei.Read(byteYiWei, 0, (int)stmYiWei.Length); //将图片文件流保存为二进制文件以便保存到数据库中 System.IO.Stream stmErWei = new System.IO.MemoryStream(); IDictionary hints = new Dictionary(); hints.Add(EncodeHintType.CHARACTER_SET, "UTF-8"); byteMatrix = new MultiFormatWriter().encode(sTmp, BarcodeFormat.QR_CODE, 200, 200, hints); toBitmap(byteMatrix).Save(stmErWei, ImageFormat.Bmp); Byte[] byteErWei = new byte[stmErWei.Length]; stmErWei.Position = 0; stmErWei.Read(byteErWei, 0, (int)stmErWei.Length); //将图片文件流保存为二进制文件以便保存到数据库中 strSQL = "insert into gdzc_biaoqian( bq_gd_no,bq_yiweima,bq_erweima,bq_us_no) values("; strSQL = strSQL + " @bq_gd_no,@bq_yiweima,@bq_erweima,@bq_us_no)"; SqlCommand commandImage = new SqlCommand(strSQL, connectionImage); commandImage.Parameters.Clear(); commandImage.Parameters.Add("@bq_gd_no", SqlDbType.Int).Value = Convert.ToInt32(sGdzcNo); commandImage.Parameters.Add("@bq_yiweima", SqlDbType.Image).Value = byteYiWei; commandImage.Parameters.Add("@bq_erweima", SqlDbType.Image).Value = byteErWei; commandImage.Parameters.Add("@bq_us_no", SqlDbType.Int).Value = Convert.ToInt32(Session["LoginUserID"]); commandImage.ExecuteNonQuery(); commandImage.Dispose();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值