2016-11-22 5 views
1

Я создаю наблюдателя свойств (наблюдение за ключом) для моего приложения. Идеальным является наблюдение за странным значением для значения (String или Dictionary). Я написал это в viewDidLoadios property Observer Objective C (String или dictionary)

@interface BarScannerViewController() <AVCaptureMetadataOutputObjectsDelegate> 
{ 
    NSMutableDictionary *scanTrackingNumbers; 
} 

и viewdidload

[scanTrackingNumbers addObserver:self forKeyPath:@"scanTrackingNumber" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil]; 

[scanTrackingNumbers setValue:@"test123455" forKey:@"scanTrackingNumber"]; 

и реализовать метод

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context{ 

    if ([keyPath isEqualToString:@"scanTrackingNumber"]){ 
     NSLog(@"scanTrackingNumber Changed %@",change); 
     NSLog(@"scan12335 %@",scanTrackingNumbers); 
    } 
} 

Я не знаю, почему он не работает (с учетом того, отпечатанное на консоль журнал). Кто-нибудь знает, что не так с кодом? Благодаря!

+0

любой из есть идеал? –

+0

, вы должны были забыть инициализировать член 'scanTrackingNumbers', как сказал @Raegtime. – Enix

ответ

1

попробовать setObject вместо setValue «Я не знаю, если это имеет значение» Кроме того, убедитесь, что словарь инициализирован

запись этого перед добавлением наблюдателю

self.scanTrackingNumbers = [[NSMutableDictionary alloc]init]; 

простой способ

self.scanTrackingNumbers = [NSMutableDictionary dictionary]; 

Простой способ

self.scanTrackingNumbers = @{} 
+0

Спасибо, много забыли инициализировать dict. У вас есть какой-либо идеал, как мы можем изменить для массива или коллекции объекта? –

+0

Вы хотите отредактировать определенный объект в массиве? это то, что вы имеете в виду – Henawey

+0

, есть два способа первого использования RactiveCocoa «subscribeNext», с другой стороны, с помощью NSPredicate для фильтрации массива, чтобы получить объект на основе ваших утверждений. – Henawey

1

Вы должны создать словарь :-D

scanTrackingNumbers = [NSMutableDictionary new]; 
+0

спасибо, мой плохой новый инициализирует переменную! как мы можем изменить для простой строки? –

+0

Знаете ли вы, как мы можем отслеживать изменение массива (редактировать, удалять, добавлять ...)? –

+0

Подкласс NSMutableArray ... переопределить addObject, removeObject ... methods :-) – Raegtime