2017-09-13 11 views
3

クラスにカスタムデリゲートを作成していて、自分のコントローラーでそのプロトコルを実装しようとしています。 デリゲートがnilなので、動作しません。 これは私がそれをやっている方法です:カスタムデリゲートのクラス

BluetoothOperations.swit

protocol GetWatchCollectedData:NSObjectProtocol { 
    func getWatchCollectedData(COMMAND_ID : UInt8, data : NSData) 
} 

class BluetoothOperations: NSObject{ 
    var getWatchCollectedData: GetWatchCollectedData? 

    func customFunc(){ 
     getWatchCollectedData.getWatchCollectedData(ID,Data) 
    } 
} 

SomeController.swift

class SomeController: UIViewController { 
    let object = BluetoothOperations() 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     object.getWatchCollectedData = self 

    } 
} 

extension SomeController: GetWatchCollectedData{ 
    func getWatchCollectedData(COMMAND_ID : UInt8, data : NSData){ 
     print("delegate working.") 
    } 
} 

また、私はクラスのオブジェクトを作成し、BluetoothOperations's object. getWatchCollectedData = selfを割り当てるために試してみましたviewDidLoadでは動作しませんでした。

私はそれが間違っていますか?おかげさまで

+0

BluetoothOperationsのオブジェクトです。 getWatchCollectedData = self –

+0

もそれを試しました。しかし動作しませんでした。 @HarshalValanda –

+0

あなたの 'BluetoothOperations'オブジェクトはグローバルオブジェクトですか? 、またはインスタンス –

答えて

2

コードが正しいように見えます。それが失敗する可能性のある理由はここにあります。 SomeControllerでは、BluetoothOperationsクラスからobjectを作成し、代理人を正しく割り当てています。

ただし、コントローラで定義されているオブジェクトがデリゲートコールを送信していることを確認する必要があります。 BluetoothOperationsの別のインスタンスを持つ可能性があり、実際に使用されています。そのインスタンスでは、代理人が設定されていません。

これを確認する最も簡単な方法は、ビューコントローラで作成したオブジェクトのデリゲートを手動でトリガすることです。デリゲートがトリガされるかどうかを確認するには、次のコードを試してください。あなたはSomeControllerBluetoothOperationsのオブジェクトを作成しても、他のビューコントローラでのデリゲートだけに責任がある今SomeController1

を言わせてきたようにあなたが正しく、適切なクラス間

をデリゲートを実装しなくてい

class SomeController: UIViewController { 
    let object = BluetoothOperations() 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     object.getWatchCollectedData = self 
     object.customFunc()// Trigger the delegate function here 
    } 
} 

extension SomeController: GetWatchCollectedData{ 
    func getWatchCollectedData(COMMAND_ID : UInt8, data : NSData){ 
     print("delegate working.") 
    } 
} 
+0

大丈夫、私はあなたが言ったことをし、その関数はviewDidLoadから呼び出されています。 –

+0

@sharadchauhan。はい。これは、代理システムが正しく機能していることを意味します。事は間違っている私は言ったものとまったく同じです。デリゲートはあなたが実行している '' BluetoothOperations''オブジェクトに設定されていません。だからあなたのコントローラとデリゲートから初期化された 'BluetoothOperations'オブジェクトが正しく設定されていることを確認してください。 –

+0

大丈夫、可能な解決策は? –

1

関連クラスのみ

`BluetoothOperations` (Call `customFunc`)  ----> `SomeController1` 
`BluetoothOperations` (Call `customFunc`) ----> `SomeController` 

そして、あなたはそれが非常に困難であり、あなたのSomeController1SomeControllerとして

はどこでも

からの接続ではありません。これは、この方法によって達成することができませんでした

このよう
`SomeController1 ---> `BluetoothOperations` (Call `customFunc`) ----> SomeController` 

をしようとしていますあなたに答えを提案する

SomeController1SomeControllerの間にデリゲートを作成します。

あなたには分かりますか?

関連する問題