Swift iOS - 无法访问我的 类 或 cocoapod 文件中的通知
Swift iOS -Can't access my classes or notifications from within cocoapod's files
我下载了 2 个完全不同的 pods,将它们导入我的项目,在我的一个视图控制器中使用它们,如果我选择使用它们中的任何一个,一切都很好。
但是,如果我尝试从 pod 的一个文件中访问相同的视图控制器,则无法识别完全相同的视图控制器。我还创建并尝试向视图控制器发送通知,但通知没有得到响应(它工作正常,我从我创建的其他 classes 尝试过)。然后我在 pod 文件的 class 下创建了一个单例,然后尝试访问该单例但没有任何反应(打印语句应该 运行)。
它发生在 2 个不同的 pod 文件上,它们都工作正常所以我假设还有另一个我忽略的问题阻止外部文件在 pods?
pod 在 MyController 中工作正常
import ThePod
class MyController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(printSomethingInMyController(_:)), name: Notification.Name("printSomethingInMyController"), object: nil)
// the pod works fine
let podFile = FileWithinThePod()
}
@IBAction func buttonTapped(_ sender: UIButton) {
// the pod does what it's supposed to do
podFile.startSomeAction()
}
@objc fileprivate func printSomethingInMyController(_ notification: Notification) {
print("notification- this should print in MyController")
}
static func printSomethingElse() {
print("this a class print function")
}
}
在 pod 文件中无法访问 MyController
open class FileWithinThePod {
override init(frame: CGRect) {
super.init(frame: frame)
setup()
}
required public init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setup()
}
setUp() {
// whatever this file needs
}
func startSomeAction() {
// 0. the pod does something and it works fine
// 1. ***THE PROBLEM IS HERE. I can't access MyController (photo below)
MyController.printSomethingElse()
// 2. ***THE PROBLEM IS ALSO HERE. This notification never fires because nothing ever prints
NotificationCenter.default.post(name: Notification.Name("printSomethingInMyController"), object: nil, userInfo: nil)
// 3. *** nothing happens with MySingleton because nothing ever prints
MySingleton.startPrinting()
// 4. *** same thing nothing prints
let x = MySingleton.sharedInstance
x.tryPrintingAgain()
}
}
class MySingleton {
static let sharedInstance = MySingleton()
static func startPrinting() {
print("print something from MySingleton")
NotificationCenter.default.post(name: Notification.Name("printSomethingInMyController"), object: nil, userInfo: nil)
}
func tryPrintingAgain() {
print("try again")
NotificationCenter.default.post(name: Notification.Name("printSomethingInMyController"), object: nil, userInfo: nil)
}
}
这是一种理想的行为。 pod 文件(库)不依赖于您的应用程序目标或您的应用程序 类。它对您的文件或 类.
一无所知
您的应用程序依赖于那些库,而那些库不依赖于您的应用程序。以这种方式编辑库不是一件好事,因为下一个 pod update
这些更改可能会消失。
解决方案: 将 pod 项目中的源文件添加到您的应用程序文件夹中。不要将它们添加为广告连播。
我下载了 2 个完全不同的 pods,将它们导入我的项目,在我的一个视图控制器中使用它们,如果我选择使用它们中的任何一个,一切都很好。
但是,如果我尝试从 pod 的一个文件中访问相同的视图控制器,则无法识别完全相同的视图控制器。我还创建并尝试向视图控制器发送通知,但通知没有得到响应(它工作正常,我从我创建的其他 classes 尝试过)。然后我在 pod 文件的 class 下创建了一个单例,然后尝试访问该单例但没有任何反应(打印语句应该 运行)。
它发生在 2 个不同的 pod 文件上,它们都工作正常所以我假设还有另一个我忽略的问题阻止外部文件在 pods?
pod 在 MyController 中工作正常
import ThePod
class MyController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(printSomethingInMyController(_:)), name: Notification.Name("printSomethingInMyController"), object: nil)
// the pod works fine
let podFile = FileWithinThePod()
}
@IBAction func buttonTapped(_ sender: UIButton) {
// the pod does what it's supposed to do
podFile.startSomeAction()
}
@objc fileprivate func printSomethingInMyController(_ notification: Notification) {
print("notification- this should print in MyController")
}
static func printSomethingElse() {
print("this a class print function")
}
}
在 pod 文件中无法访问 MyController
open class FileWithinThePod {
override init(frame: CGRect) {
super.init(frame: frame)
setup()
}
required public init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setup()
}
setUp() {
// whatever this file needs
}
func startSomeAction() {
// 0. the pod does something and it works fine
// 1. ***THE PROBLEM IS HERE. I can't access MyController (photo below)
MyController.printSomethingElse()
// 2. ***THE PROBLEM IS ALSO HERE. This notification never fires because nothing ever prints
NotificationCenter.default.post(name: Notification.Name("printSomethingInMyController"), object: nil, userInfo: nil)
// 3. *** nothing happens with MySingleton because nothing ever prints
MySingleton.startPrinting()
// 4. *** same thing nothing prints
let x = MySingleton.sharedInstance
x.tryPrintingAgain()
}
}
class MySingleton {
static let sharedInstance = MySingleton()
static func startPrinting() {
print("print something from MySingleton")
NotificationCenter.default.post(name: Notification.Name("printSomethingInMyController"), object: nil, userInfo: nil)
}
func tryPrintingAgain() {
print("try again")
NotificationCenter.default.post(name: Notification.Name("printSomethingInMyController"), object: nil, userInfo: nil)
}
}
这是一种理想的行为。 pod 文件(库)不依赖于您的应用程序目标或您的应用程序 类。它对您的文件或 类.
一无所知您的应用程序依赖于那些库,而那些库不依赖于您的应用程序。以这种方式编辑库不是一件好事,因为下一个 pod update
这些更改可能会消失。
解决方案: 将 pod 项目中的源文件添加到您的应用程序文件夹中。不要将它们添加为广告连播。