delegate always getting nil value in dynamic framework class

I used delegation for passing data to ViewController B to A in dynamic framework . B is my dynamic framework ViewController . A is my app ViewController . I am always set delegate as self in my A class Without dynamic framework it works perfectly

Class B code : Inside dynamic framework (Using .xib)


import UIKit
public protocol MediaDataDelegate: class{
func mediaDidFinish(controller:
LoginViewController,transactionId:String,returnURL: String)
}
public class LoginViewController: UIViewController {
public var message = ""
public var delegate: MediaDataDelegate?
public init() {
super.init(nibName: "LoginViewController", bundle: Bundle(for: LoginViewController.self))
print("message 1234 :\(message)")
}
required public init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override open func viewDidLoad() {
super.viewDidLoad()
print("message 1234 :\(message)")
}
public class func logToConsole(_ msg: String) {
print(msg);
}
@IBAction func backToMainBtnTapped(_ sender: UIButton) {
self.delegate?.mediaDidFinish(controller: self, transactionId: "WERTYQWRCT", returnURL: "www.media.com")
}
}


Class A Code:Inside Other App (Using Storyboard)

Click on conduct IPVButton navigate to dynamic framework view controller I also pass some value to message string but in dynamic framework class getting empty string.


import UIKit
import NBView
class ViewController: UIViewController ,MediaDataDelegate{
var loginVC = LoginViewController()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
LoginViewController.logToConsole("hello media")
}
@IBAction func conductIPVBtnTapped(_ sender: Any) {
loginVC.delegate = self
present(loginVC, animated: true, completion: nil)
}
func mediaDidFinish(controller: LoginViewController, transactionId:
String, returnURL: String) {
print("Trans Id\(transactionId)")
print("return URl \(returnURL)")
}
}


Replies

It would be easier to read with better formatting:


import UIKit
public protocol MediaDataDelegate: class {
  func mediaDidFinish(controller: LoginViewController, transactionId: String, returnURL: String)
}

public class LoginViewController: UIViewController {
     public var message = ""
     public var delegate: MediaDataDelegate?

     public init() {
       super.init(nibName: "LoginViewController", bundle: Bundle(for: LoginViewController.self))
       print("message 1234 :\(message)")
     }

     required public init?(coder aDecoder: NSCoder) {
       fatalError("init(coder:) has not been implemented")
     }

     override open func viewDidLoad() {
       super.viewDidLoad()
       print("message 1234 :\(message)")
     }

     public class func logToConsole(_ msg: String) {
       print(msg);
     }

     @IBAction func backToMainBtnTapped(_ sender: UIButton) {
       self.delegate?.mediaDidFinish(controller: self, transactionId: "WERTYQWRCT", returnURL: "www.media.com")
     }
}



import UIKit
import NBView

class ViewController: UIViewController, MediaDataDelegate {

     var loginVC = LoginViewController()

     override func viewDidLoad() {
       super.viewDidLoad()
       // Do any additional setup after loading the view.
       LoginViewController.logToConsole("hello media")
     }

     @IBAction func conductIPVBtnTapped(_ sender: Any) {
       loginVC.delegate = self
       present(loginVC, animated: true, completion: nil)
     }

     func mediaDidFinish(controller: LoginViewController, transactionId: String, returnURL: String) {
       print("Trans Id\(transactionId)")     
       print("return URl \(returnURL)")
     }
}


but in dynamic framework class getting empty string.

So, when you call self.delegate?.mediaDidFinish on line 29, you get nothing printed by lines 20 & 21 of ViewController, or just "Trans Id" and "return URl" ?

Could you post all the print you get in a session ?


I'm not totally sure, but I thing in framework, delegate should be declared with @objC


@objc weak open var delegate: MediaDataDelegate?

In your case

@objc public var delegate: MediaDataDelegate?


PS: What is NBView ?