绑定到NSArrayController的arrangeObjects的属性的setter被多次调用

时间:2012-03-17 05:58:54

标签: objective-c cocoa binding nsarraycontroller

我有一个属性

@property (strong, nonatomic) NSArray *techniqueSetObjects;

它在+initialize

中作为自定义绑定公开
+ (void)initialize {
    [self exposeBinding:@"techniqueSetObjects"];
}

在app delegate的applicationDidFinishLaunching:中,它会绑定到NSArrayController.arrangedObjects

[self.futureBoxesController bind:@"techniqueSetObjects" toObject:self.techqSetController withKeyPath:@"arrangedObjects" options:nil];

有问题的阵列控制器在Core Data Entity模式下运行,它从另一个阵列控制器selection获取内容(路径指向主实体中的关系)。

然后我有techniqueSetObjects属性的自定义setter:

- (void)setTechniqueSetObjects:(NSArray *)newTechqSetObjects {
    [self willChangeValueForKey:@"techniqueSetObjects"];
    techniqueSetObjects = [newTechqSetObjects copy];
    [self didChangeValueForKey:@"techniqueSetObjects"];
    NSLog(@"New count: %ld", [techniqueSetObjects count]);
}

大多数情况下,一切都按预期工作,在应用程序启动后,我会看到以下日志行:

New count: 0
New count: 2

但偶尔(没有明显原因)setter会使用相同的新数组调用3次,如下所示:

New count: 0
New count: 2
New count: 2
New count: 2

不是说这会导致重大的性能损失或其他事情,只是让我感到恼火,我不知道到底发生了什么。这是绑定的正常行为吗?我怀疑这可能是我还不知道的其他一些更严重问题的早期症状。

0 个答案:

没有答案