2017-12-18 8 views
0

1つのビューコントローラから別のビューコントローラにバイト配列を読み取ろうとしていますが、下のコードを見つけてください。周辺機器の値を迅速に正しく読み取るには?

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) 
       } 

これは私が最初から私の配列を読み込むしようとしている私の2番目のビューでありますビュー

class Second: UIViewController { 

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

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

print(myByteArray2) 
} 

今私が持っている[11,12,13,14,15,16,17,18,19,20] myByteArrayからしかし、myByteArray2から[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]がありますか?

誰かが助けることができますか?

また、新しい値を書き込んだり読み込んだりする前に、rxCharactersticのreadValueバッファをクリアするにはどうすればよいですか?

ご意見・ご感想をお待ちしております。

おかげ

EDIT - >私の通過が

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) 
    } 

BLECentral

から

をどのように行われるか今の私の最初の下で、私はこの

のような周辺機器を渡しているセグエブロックの準備
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
if segue.destination is Second 
{ 
let vc2 = segue.destination as? Second 
vc2.periperal = blePeripheral 
} 
} 
+0

View Controllerをどのように移行していますか?二番目に電話していますか? – Diesel

+0

@Dieselこんにちはディーゼル、多くのおかげで私はあなたの答えから少しの読書でそれを解決することができました:) – nar0909

+0

問題はありません。あなたがしていることは正しいです! Appleのチュートリアル(ちょうどそれを読んで)に行くことをお勧めします。それは時間を節約し、基本をカバーするからです。ブックストアで「App Development with Swift」というより多くの時間がある場合は、https://developer.apple.com/library/content/referencelibrary/GettingStarted/DevelopiOSAppsSwift/から始めるのがよいでしょう。 – Diesel

答えて

0

あなたは新しいFirstビューコントローラを作成していますur Secondビューコントローラを使用して、既に作成されたものにアクセスするのではなく、

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

ここでは、2つのFirstが作成されました。あなたがしたいのは、既に作成されたFirstビューコントローラにアクセスすることです。別の方法がないと仮定して、あなたは "シングルトン"を持ちたいと思う。これは後で説明するようにこれを処理するのが非常に悪い方法ですが、もっと良い方法がありますが、通信できない場合はFirstからSecondにアクセスするソリューションを提供しますが、Firstがすでに作成されています。

あなたのようFirstにコードの一部を宣言した場合:

static let shared = First() 

次に、そのシングルトンが言われて、それはビューの間の通信を処理する、本当に悪い方法だと

let first = First.shared 

介してアクセスすることができますコントローラ。 First from Secondを呼び出す場合、FirstからSecondへのデータを渡す必要があります(またはFirstからSecondへの参照を渡してSecondがFirstにアクセスできるようにする)。

は、あなたが移動する前に

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

方法でビューコントローラ間でデータを渡すために、一般的には良い方法があります。どのような場合でも、2番目のビューコントローラは必要なデータを渡す必要があります。

最後に、シングルトンビューコントローラがひどいアイデアである別の理由は、MVCの概念から離れることです。したがって、適切なデータをSecondに渡すことができない場合、おそらく、FirstとSecondの両方がMVCのモデルで動作することができるデータを処理する新しいクラスが必要になるでしょう。

+0

お返事ありがとうございます。https://stackoverflow.com/questions/47824265/how-to-modify-an-existing-blecentral-class-into-a-singleton-classこれはまさに私が持っているものです。どのようにそれを行う必要があるか私に今助けてください?私はシングルトンとして望んでいない、私は1つのビューコントローラで読み書きすることができ、私は同じ機能を他のビューに渡したいだけですか?どんな助けもありがたい。 – nar0909

+0

私は周辺機器をどのように通過したかを確認してください。多くのありがとう – nar0909

+0

私はあなたが問題を解決してうれしいです。多くのデータがある場合は、そのデータを扱うまったく新しいクラスを作成することができます。たとえば、私はそれに複数の食品の場所を持つアプリを持っています。私のクラスは外出して場所をダウンロードし、保存し、getPlaceやgetAllPlaces、refreshPlacesなどの関数を持っています。それはシングルトンでもあり、誰もがその場所にアクセスできます。そうすれば、必要なときに毎回データをダウンロードする必要はありません。ここでは、MVCでかなり良い読書です:https://www.raywenderlich.com/132662/mvc-in-ios-a-modern-approach – Diesel