gpt4 book ai didi

ios - 如何在swift中正确读取ble外设值?

转载 作者:行者123 更新时间:2023-11-30 11:55:32 26 4
gpt4 key购买 nike

我正在尝试将字节数组从一个 View Controller 读取到另一个 View Controller ,请在下面找到我的代码。

从我的第一次观看

class First: UIViewController {

var myByteArray = [UInt8](repeating:0, count: 20)

viewDidLoad(){
......}

稍后我在函数中读取数据的语句

func passThis(){

let ReceiveData = rxCharacteristic?.value
if let ReceiveData = ReceiveData {
let ReceivedNoOfBytes = ReceiveData.count
myByteArray = [UInt8](repeating: 0, count: ReceivedNoOfBytes)
(ReceiveData as NSData).getBytes(&myByteArray, length: ReceivedNoOfBytes)
print("Data Received ",myByteArray)
}

这是我的第二个 View ,我正在尝试从第一个 View 读取我的数组

class Second: UIViewController {

var myByteArray2 = [UInt8](repeating: 0, count: 20)

viewDidLoad(){
super.viewDidLoad()
let fvc = First()
myByteArray2 = fvc.myByteArray

print(myByteArray2)
}

现在我有来自 myByteArray 的 [11,12,13,14,15,16,17,18,19,20]但是 myByteArray2 有 [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] 吗?

有人可以帮忙吗?

另外,在写入和读取新值之前如何清除 rxCharacterstic 中的 readValue 缓冲区?

感谢任何帮助/评论。

谢谢

编辑 -> 我的传球是如何完成的

来自 BLECentral

class BLECentral: ...

var centralManager: CBCentralManager!

//After Scanning and connecting

func centralManager(_central: CBCentralManager, didConnect peripheral: CBPeripheral){

peripheral.delegate = self

peripheral.discoverServices([BLEUUID])



//Once connected, move to new view controller to manager incoming and outgoing data
let storyboard = UIStoryboard(name: "Main", bundle: nil)

let firstVC = storyboard.instantiateViewController(withIdentifier: "First") as! First

firstVC.peripheral = peripheral

navigationController?.pushViewController(firstVC, animated: true)
}

现在,在我的第一个准备segue block 中,我正在像这样传递外围设备

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.destination is Second
{
let vc2 = segue.destination as? Second
vc2.periperal = blePeripheral
}
}

最佳答案

您正在从 Second View Controller 创建一个新的 First View Controller ,而不是访问已创建的 View Controller 。

//Create a new View Controller
let fvc = First()

所以你现在已经制作了两个First。您想要做的是访问已经创建的 First View Controller 。假设没有其他办法,你想要一个“单例”。这是一个非常糟糕的处理方法,我稍后会解释,而且很可能有更好的方法,但我将提供一个解决方案,如果他们从不通信,但 First 已经创建,则可以从 Second 访问 First .

如果您在 First 中声明如下代码:

static let shared = First()

然后可以通过

访问该单例
let first = First.shared

话虽如此,这是处理 View Controller 之间通信的一种非常糟糕的方式。如果您从 First 调用 Second,则应该将数据从 First 传递到 Second(或者您可以将 First 的引用传递到 Second,以便 Second 可以访问 First)。

通常有一些好的方法可以在 View Controller 之间传递数据

func prepare(for segue: UIStoryboardSegue, sender: Any?) 

导航之前的方法。无论何时,无论如何,第二个 View Controller 都应该向其传递所需的数据。

最后,单例 View Controller 是一个糟糕想法的另一个原因是它脱离了 MVC 概念。因此,如果您无法将正确的数据传递给 Second,您可能需要一个新类来为您处理 First 和 Second 都可以使用的数据,这就是 MVC 中的模型。

关于ios - 如何在swift中正确读取ble外设值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47861043/

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