gpt4 book ai didi

ios - 二维码添加多个键值对

转载 作者:搜寻专家 更新时间:2023-11-01 07:26:20 24 4
gpt4 key购买 nike

我正在我的应用程序中创建二维码,我想知道是否可以添加第二个键值对。现在我有一个 12 位数字的“inputMessage”键,我想为另一个键获得一些其他数据。例如,使用另一个字符串作为名为“gym”的新键。

这是我创建二维码的函数:

func generateCode() {
let gymData = gymName.dataUsingEncoding(NSISOLatin1StringEncoding, allowLossyConversion: false)
let codeNumberData = generateRandomNumber(12).dataUsingEncoding(NSISOLatin1StringEncoding, allowLossyConversion: false)

let filter = CIFilter(name: "CIQRCodeGenerator")
filter?.setValue(codeNumberData, forKey: "inputMessage")
// filter?.setValue(gymData, forKey: "gym")
filter?.setValue("Q", forKey: "inputCorrectionLevel")

let qrCodeImage = filter?.outputImage
let context = CIContext(options: nil)
let cgImage = context.createCGImage(qrCodeImage!, fromRect: (qrCodeImage?.extent)!)

let image = UIImage(CGImage: cgImage, scale: 1.0, orientation: .Up)
let resized = resizeImage(image, withQuality: CGInterpolationQuality.None, rate: 5.0)
codeImageView.image = resized
}

最佳答案

CIFilter 只希望从 inputMessage 生成二维码,因此您需要创建一个聚合 inputMessage 并将其传递给过滤器。一种相当直接的方法是根据您的输入创建字典,使用 NSKeyedArchiver 将其序列化为 NSData blob,然后将结果设置为您的 inputMessage

func generateCode() {
var aggregateData = [String: NSData]()

if let gymData = gymName.dataUsingEncoding(NSISOLatin1StringEncoding, allowLossyConversion: false) {
aggregateData.updateValue(gymData, forKey: "gymData")
}

if let codeNumberData = generateRandomNumber(12).dataUsingEncoding(NSISOLatin1StringEncoding, allowLossyConversion: false) {
aggregateData.updateValue(codeNumberData, forKey: "codeNumberData")
}

let archived = NSKeyedArchiver.archivedDataWithRootObject(aggregateData)
let filter = CIFilter(name: "CIQRCodeGenerator")

filter?.setValue(archived, forKey: "inputMessage")
filter?.setValue("Q", forKey: "inputCorrectionLevel")

let qrCodeImage = filter?.outputImage
let context = CIContext(options: nil)
let cgImage = context.createCGImage(qrCodeImage!, fromRect: (qrCodeImage?.extent)!)

let image = UIImage(CGImage: cgImage, scale: 1.0, orientation: .Up)
let resized = resizeImage(image, withQuality: CGInterpolationQuality.None, rate: 5.0)
codeImageView.image = resized
}

当然,这意味着在接收端,您需要期望负载是一个字典,并通过它们的键访问各个组件。应该看起来像这样。

guard let inputData = scannedQrString.dataUsingEncoding(NSISOLatin1StringEncoding, allowLossyConversion: false),
dictionary = NSKeyedUnarchiver.unarchiveObjectWithData(inputData) as? [String: NSData] else {
return
}

let gymData = dictionary["gymData"]
let codeNumberData = dictionary["codeNumberData"]

关于ios - 二维码添加多个键值对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35896535/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com