CBPeripheral - "didWriteValueFor" 出现错误 "The prepare queue is full."

CBPeripheral - "didWriteValueFor" gets error "The prepare queue is full."

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

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

委托方法:

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

print(error?.localizedDescription)

时出现以下错误

Error :
The prepare queue is full

提前致谢。

如果有人正在寻找答案。

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

下面是创建数据块的代码

 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