我发现了一个问题,我有一个包含 Swift 和 Objective - C 文件的项目。我添加了 NSnotificationcenter addobserver,它在调试模式下工作正常,但是当我生成 IPA(发布模式)时它不起作用。我在 Objective-C
类中添加了观察者并从 Swift 类中发布。
Swift 类:点击按钮
@IBAction func btnBackTapped(_ sender: Any) {
let testManager = TestManager.init(window: appdel?.window, andApplicationViewController: splitViewController!)
NotificationCenter.default.post(name: NSNotification.Name(rawValue:"test"), object: nil)}
>目标 - 类:
-(id)initWithWindow:(UIWindow *)w andApplicationViewController:(UIViewController *)avc {
self = [super init];
if (self)
{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(testMethod:) name:@"test" object:nil];
}
return self;
}
-(void)testMethod:(NSNotification *)notification {
NSLog(@"testMethod called ");
}
注意:一旦我使用 Xcode 11 版本,我又注意到一件事,然后它在两种情况下都有效。 (发布和调试模式工作正常)。只有我在 Xcode 12 版本中遇到的问题,仅限调试模式。我发现了这个问题,现在即使在调试模式下也能正常工作。 问题: 我在本地方法中创建了一个 TestManager 类的对象。所以类在通知火灾时销毁。这就是不调用其他类通知方法的原因。 修正: 我已经将 TestManager 类的对象创建为全局而不是本地方法。现在工作正常。
我发布这个问题有两个原因:第一个:如果有人面临同样的问题,那么可以尝试,因为我搜索了几个小时然后我找不到问题,因为由于此问题仅在调试模式下,所以我不知道如何在 Xcode 中运行发布模式并设置断点。我找到了一种可以在发布模式下从 Xcode 运行的方法,无需每次都创建 IPA 并安装它。转到编辑方案 > 选择运行和信息选项卡 > 构建确认 > 更改调试模式。
第二: 请有人告诉我为什么它在调试模式下工作,为什么当我在本地方法而不是全局方法中创建另一个类对象时在发布模式下不起作用。任何建议都会很棒,提前致谢。快乐编码。