KCOrderedAccessorFix 0.1.1

KCOrderedAccessorFix 0.1.1

测试已测试
Lang语言 Obj-CObjective C
许可证 自定义
发布最新发布2015年11月

Kevin Cassidy Jr维护。



  • Kevin Cassidy Jr

修复“CoreDataGeneratedAccessors”以支持有序、多对多关系。在编写本文时,访问器正在常规无序KVC访问器模式(类似于NSSet)中自动生成,导致运行时崩溃。除了大多数访问器未识别的 选择器外,以下是一些常见的异常

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSOrderedSet intersectsSet:]: set argument is not an NSSet'
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSSet isSubsetOfSet:]: set argument is not an NSSet'
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSOrderedSet isSubsetOfSet:]: set argument is not an NSSet'

此分类的最简单使用是在首次初始化模型时调用kc_generateOrderedSetAccessors

_managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
[_managedObjectModel kc_generateOrderedSetAccessors];

该修复在其实体的类上为每个有序关系生成以下方法

- (void)insertObject:(NSManagedObject *)value in<Key>AtIndex:(NSUInteger)idx;
- (void)removeObjectFrom<Key>AtIndex:(NSUInteger)idx;
- (void)insert<Key>:(NSArray *)value atIndexes:(NSIndexSet *)indexes;
- (void)remove<Key>AtIndexes:(NSIndexSet *)indexes;
- (void)replaceObjectIn<Key>AtIndex:(NSUInteger)idx withObject:(NSManagedObject *)value;
- (void)replace<Key>AtIndexes:(NSIndexSet *)indexes with<Key>:(NSArray *)values;
- (void)add<Key>Object:(NSManagedObject *)value;
- (void)remove<Key>Object:(NSManagedObject *)value;
- (void)add<Key>:(NSOrderedSet *)values;
- (void)remove<Key>:(NSOrderedSet *)values;

通过kc_generateOrderedSetAccessorsForEntity:kc_generateOrderedSetAccessorsForRelationship:可以更精确地应用这些KVC方法。

调用生成的方 法不会设置底层的属性为新有序集合,像其他一些解决方案那样。相反,每个方法会为有序多对多关系生成适当的KVO通知,并使用高效的动态生成的原声访问器

此类使用了ARC。在手动引用计数的项目中使用,请向“编译器标志”中添加“NSManagedObjectModel+KCOrderedAccessorFix.m”的“编译源”下的-fobjc-arc标志。