git shortlog -sn --no-merges
премахване на ангажиментите за сливане от броя.
Отговори (2)
Не трябва да правите директни публични свойства за променливи колекции, за да избегнете мутирането им без ваше знание. NSArray
сам по себе си не може да се наблюдава ключ-стойност, но вашето свойство @"events"
е. Ето как да го наблюдавате:
Първо, декларирайте публична собственост за неизменна колекция:
@interface Model
@property (nonatomic, copy) NSArray *events;
@end
След това във вашата реализация го върнете с променлив ivar:
@interface Model ()
{
NSMutableArray *_events;
}
@end
и заменете getter и setter:
@implementation Model
@synthesize events = _events;
- (NSArray *)events
{
return [_events copy];
}
- (void)setEvents:(NSArray *)events
{
if ([_events isEqualToArray:events] == NO)
{
_events = [events mutableCopy];
}
}
@end
Ако други обекти трябва да добавят събития към вашия модел, те могат да получат променлив прокси обект чрез извикване на -[Model mutableArrayValueForKey:@"events"]
.
NSMutableArray *events = [modelInstance mutableArrayValueForKey:@"events"];
[events addObject:newEvent];
Това ще задейства известия на KVO, като всеки път задава свойството с нова колекция. За по-добра производителност и по-подробен контрол внедрете останалата част от приспособления за достъп до масив.
Вижте също: Наблюдение на NSMutableArray за вмъкване/премахване.
Според документи относно методите за достъп, трябва да внедрите:
- (void)addEventsObject:(Event*)e
{
[_events addObject:e];
}
- (void)removeEventsObject:(Event*)e
{
[_events removeObject:e];
}
След това KVO ще задейства известията, когато бъдат извикани.