我有一个项目https://github.com/niklassaers/NJSNotificationCenter到目前为止只有两个单元测试。其中一个运行,其中一个运行60%的时间。时间剩下的40%,这将失败,因为我NSMutableValue包含一个零值,尽管我从来没有把在零值(也不应该说是可能的)NSMutableDictionary与零作为值
的问题就出现在这里:
- (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!");
}
}
我做了一个关键,它不是零,我做了一个值,它不是零,我将它添加到我的字典中并从字典中取回,但现在它是零!这对我来说没有意义。
我已经在@synchronized块中包装了每个对observers(一个本地实例变量)的访问权限,以防万一有其他线程正在进行(没有)。
请查看我的代码(BSD许可证)并查看它,并帮助我理解这可能是什么。如果你愿意,我很乐意将这个程序与你配对,我是Twitter上的@niklassaers
你真的实例化一个字典实例吗? –
我怀疑这段文字:NJSNotificationValue * value = [[NJSNotificationValue alloc] initWithSelector:aSelector]; – yunas
@ColinMorelli:我是,观察员不是零。如果你看看init方法,它会在那里实例化。 – niklassaers