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

它适用于每种条形码类型,但在 QRcode 上返回 nil! 'result' 和 'error' 都是空的。这是我的代码:

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);
}

有什么问题吗?

最佳答案

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

  • 打开文件 ZXingObjC\qrcode\encoder\ZXEncoder.m
  • 找到这一行: int minPenalty = NSIntegerMax; 。必须有一个警告: 从 'long' 到 'int' 的隐式转换将 9223372036854775807 更改为 -1 。这就是问题的原因。 NSIntegerMax 在我的 64 位 Mac 上返回 9223372036854775807 并且 minPenalty 获取 -1 值(因为 int 类型无法存储这么大的数字)。
  • NSIntegerMax 替换为 INT_MAX 。它应该返回正确的值: 2147483647 。根据 this question 的答案,这是 NSIntegerMax 在 32 位机器上返回的数字。
  • 运行应用程序,您将获得您的二维码!
  • 关于objective-c - 在 Mac 上使用 ZXingObjC 创建二维码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16024161/

    10-11 16:40