【发布时间】:2014-01-27 16:28:27
【问题描述】:
我有一个将在应用委托中创建的单点类。
当我运行 XCTTests 时,它会再次创建。
+ (instancetype)urlSchemeManager
{
static dispatch_once_t onceToken;
static UrlSchemeManager* _sharedInstance;
dispatch_once(&onceToken, ^{
_sharedInstance = [UrlSchemeManager new];
});
return _sharedInstance;
}
这会导致两个不同的实例。如果我只是将它用于单元测试,这没问题。 但是在集成测试中,当我为 urlSchmemeManager 注册一个观察者时,我得到一个 EXC_BAD_ACCESS,因为它已经被 rootViewController(在 UI 中)观察到了。
在 RootViewController 中:
UrlSchemeManager * schemeManager = [GlobalSpace globalSpace].urlSchemeManager;
[schemeManager addObserver:self forKeyPath:OBSERVER_KEY_URL_SCHEME_MANAGER_CONTENT_MORE options:NSKeyValueObservingOptionNew context:nil];
有人知道我该如何解决这个问题吗?
【问题讨论】:
-
when i register an observer vor urlSchmemeManager i get a EXT_BAD_ACCESSvor 代表什么? -
我更新了源代码来解决这个问题。
-
您不是说 EXC_BAD_ACCESS 吗?您能否提供有关此异常的更多信息(例如堆栈跟踪)
-
_sharedInstance只能有两个不同的实例 IFF 有两个onceToken的不同实例。例如,当您有两个包,每个包都包含定义onceToken的模块并且这些包将通过动态链接器链接到一个应用程序时,可能会发生这种情况。 -
这听起来很可能是原因。你知道如何解决这个问题吗?
标签: ios testing grand-central-dispatch observers xctest