4

我正在尝试使用http://github.com/TheLevelUp/ZXingObjC在我的 Mac 应用程序上创建 QR 码。

它适用于每种条形码类型,但在 QRcode 上返回 nil!“结果”和“错误”都是空的。这是我的代码:

NSError* error = nil;
ZXMultiFormatWriter* writer = [[ZXMultiFormatWriter alloc] init];
ZXBitMatrix* result = [writer encode:@"12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678"
                              format:kBarcodeFormatQRCode
                               width:1750
                              height:1750 hints:[[ZXEncodeHints alloc] init] error:&error];
if (result) {
    CGImageRef image = [[ZXImage imageWithMatrix:result] cgimage];
    self.image.image = [[NSImage alloc] initWithCGImage:image size:NSMakeSize(1750, 1750)];
} else {

    NSLog(@"error: %@", error);
}

它有什么问题?

4

2 回答 2

4

我遇到过同样的问题。这是解决方法。

  1. 打开文件ZXingObjC\qrcode\encoder\ZXEncoder.m

  2. 找到这一行:int minPenalty = NSIntegerMax;。上面一定有一个警告:从 'long' 到 'int' 的隐式转换将 9223372036854775807 更改为 -1。这就是问题的原因。在我的 64 位 Mac 上NSIntegerMax返回并获得价值(因为类型不能存储这么大的数字)。9223372036854775807minPenalty-1int

  3. 替换NSIntegerMaxby INT_MAX。它应该返回正确的值:2147483647. NSIntegerMax根据这个问题的答案,这就是 32 位机器上返回的数字。

  4. 运行应用程序,您将获得您的二维码!

于 2013-06-17T18:31:37.317 回答
0

尝试使用另一种方法,而不是使用 HINTS,仅使用:
[writer encode:@"yourmeganumber" format:kBarcodeFormatQRCode width:xxxx height:xxxx error:&error];

这对我有用
尝试让我知道

于 2013-04-17T01:06:41.577 回答