2016-11-22 35 views
1

我正在为我的应用程序构建属性观察器(键值观察)。理想的做法是监视值的奇怪值(字符串或字典)。我在viewDidLoad中ios属性观察者目标C(字符串或字典)

@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

非常感谢忘了初始化字典。你有什么理想的,我们如何修改数组或对象的集合? –

+0

你的意思是编辑数组中的特定对象?是什么意思 – Henawey

+0

有两种方式第一次使用RactiveCocoa“subscribeNext”,另一种方式是使用NSPredicate过滤数组以获得基于您的语句的对象 – Henawey

1

你必须创建词典:-D

scanTrackingNumbers = [NSMutableDictionary new]; 
+0

谢谢,我的坏的新的初始化变量!我们如何修改简单的字符串? –

+0

你知道我们该如何监控一个数组有变化(编辑,删除,添加..)? –

+0

子类NSMutableArray ...重写addObject,removeObject ...方法:-) – Raegtime