我在https://github.com/niklassaers/NJSNotificationCenter有一个项目,到目前为止只有两个单元测试。其中一个运行,其中一个运行 60% 的时间。剩下的 40% 的时间,它会失败,因为我的 NSMutableValue 包含一个 nil 值,即使我从来没有输入一个 nil 值(也不应该这样做)
问题出现在这里:
- (void) addObserver:(id)observer selector:(SEL)aSelector name:(NSString *)aName object:(id)anObject priority:(NSInteger)priority {
NJSNotificationKey *key = [[NJSNotificationKey alloc] initWithObserver:observer name:aName object:anObject];
NSLog(@"Key is: %p", key);
key.priority = priority;
NJSNotificationValue *value = [[NJSNotificationValue alloc] initWithSelector:aSelector];
NSAssert(value, @"Value cannot be nil!");
@synchronized(observers) {
observers[key] = value;
NSLog(@"Key: %p\tValue: %p\t%@", key, value, observers);
if(observers[key] == nil)
NSLog(@"This can't be!");
}
}
我创建一个键,它不是 nil,我创建一个值,它不是 nil,我将它添加到我的字典并从字典中取回它,但现在它是 nil!这对我来说毫无意义。
我已经将所有对观察者的访问(一个本地实例变量)包装在一个 @synchronized 块中,以防万一有任何其他线程正在进行(没有)。
请查看我的代码(BSD 许可证)并查看它,并帮助我了解这是怎么回事。如果你愿意,我很想和你一起做这个程序,我是 Twitter 上的@niklassaers