我试图从我的一个视图控制器读取一个字节数组到另一个,请在下面找到我的代码。
从我的第一个视图
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)
}
这是我的第二个视图,我正在尝试从First 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]但有[0,0,0,0,0,0,0,0,0,0,0]来自myByteArray2的,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块我正在通过这样的外围设备
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.destination is Second
{
let vc2 = segue.destination as? Second
vc2.periperal = blePeripheral
}
}
您正在从First
视图控制器创建新的Second
视图控制器,而不是访问已创建的控制器。
//Create a new View Controller
let fvc = First()
所以你现在有两个First
。您要做的是访问已创建的First
视图控制器。假设没有别的办法,你想拥有一个“单身人士”。这是处理这种情况的一种非常糟糕的方式,正如我稍后将解释的那样,并且最有可能是一种更好的方法,但是我将提供一个解决方案,如果他们从不通信,则从第二个访问First,但是First已经创建了。
如果你在First
中声明一段代码,例如:
static let shared = First()
然后可以通过访问该单例
let first = First.shared
话虽这么说,这是处理视图控制器之间通信的一种非常糟糕的方式。如果你从First调用Second,你应该将数据从First传递给Second(或者你可以传递First to Second的引用,以便Second可以访问First)。
通常有很好的方法在视图控制器之间传递数据
func prepare(for segue: UIStoryboardSegue, sender: Any?)
导航前的方法。无论何时,无论如何,使第二视图控制器应该传递它所需的数据。
最后,Singleton视图控制器的一个可怕想法的另一个原因是它远离了MVC概念。因此,如果您无法将正确的数据传递给Second,您可能需要一个新的类来处理您的数据,First和Second都可以使用哪个是MVC中的Model。