【问题标题】:CBPeripheral - "didWriteValueFor" gets error "The prepare queue is full."CBPeripheral -“didWriteValueFor”得到错误“准备队列已满”。
【发布时间】:2023-03-15 16:59:01
【问题描述】:

我正在使用 ZPL 打印机打印 base64 解码字符串。

对于小解码字符串,它正在打印收据,对于多行 base64 解码字符串,我收到错误。

委托方法:

 func peripheral(_ peripheral: CBPeripheral, didWriteValueFor characteristic: CBCharacteristic, error: Error?) {
          if error != nil {
            print(error?.localizedDescription)
        }
    }

print(error?.localizedDescription) 时出现以下错误

错误:
准备队列已满

提前致谢。

【问题讨论】:

    标签: swift core-bluetooth ios13 zebra-printers cbperipheral


    【解决方案1】:

    如果有人在寻找答案。

    当打印数据较大时,应先将其分成chunk,然后将每个chunk分别传给打印。

    下面是创建数据块的代码

     func createChunks(data: Data) -> ([Data]) {
              var chunks : [Data] = []
              let length = data.count
                let chunkSize = 80
                var offset = 0
                repeat {
                  let thisChunkSize = ((length - offset) > chunkSize) ? chunkSize : (length - offset);
                  let chunk = data.subdata(in: offset..<offset + thisChunkSize )
                  chunks.append(chunk)
                  offset += thisChunkSize;
                } while (offset < length);
                return chunks
            }
    

    在将数据发送到打印之前调用此方法。

    下面是方法,当用户点击打印选项时调用。

    func printReciept(text: String) {
            let zpl =  text +  ("\r\n")
            if let payload = zpl.data(using: .utf8) {
                chunksToBeSent = chunks.count
                chunksIsAlreadySent = 0
                chunks = createChunks(data: payload)
                chunks.forEach { (chunk) in
                     writeChucks(chunk: chunk)
                }
            }
        }
    

    下面的帖子也来自他们的官方演示 Github 问题。

    Issue Link

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-15
      • 1970-01-01
      • 2015-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多