У меня есть проект на 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 только в том случае, если произошла какая-либо другая потоковая передача (нет).
Пожалуйста, проверьте мой код (лицензия BSD) и посмотрите на него и помогите мне понять, как это может быть. Если вы хотите, я бы с удовольствием сыграл с вами пару программ, я @niklassaers на Twitter
Вы действительно создаете экземпляр словаря? –
Я сомневаюсь в этом фрагменте строки: NJSNotificationValue * value = [[NJSNotificationValue alloc] initWithSelector: aSelector]; – yunas
@ColinMorelli: Я, наблюдатели не ноль. Если вы посмотрите в методе init, он создается там. – niklassaers