Exception thrown in NSOrderedSet generated accessors

后端 未结 25 2560
天涯浪人
天涯浪人 2020-11-22 09:07

On my Lion app, I have this data model:

\"enter

The relationship subitem

25条回答
  •  不要未来只要你来
    2020-11-22 09:38

    I've decided to improve the solution by implementing all the required methods:

    static NSString *const kItemsKey = @"<#property#>";
    
    - (void)insertObject:(<#Type#> *)value in<#Property#>AtIndex:(NSUInteger)idx {
        NSIndexSet* indexes = [NSIndexSet indexSetWithIndex:idx];
        [self willChange:NSKeyValueChangeInsertion valuesAtIndexes:indexes forKey:kItemsKey];
        NSMutableOrderedSet *tmpOrderedSet = [NSMutableOrderedSet orderedSetWithOrderedSet:[self mutableOrderedSetValueForKey:kItemsKey]];
        [tmpOrderedSet insertObject:value atIndex:idx];
        [self setPrimitiveValue:tmpOrderedSet forKey:kItemsKey];
        [self didChange:NSKeyValueChangeInsertion valuesAtIndexes:indexes forKey:kItemsKey];
    }
    
    - (void)removeObjectFrom<#Property#>AtIndex:(NSUInteger)idx {
        NSIndexSet* indexes = [NSIndexSet indexSetWithIndex:idx];
        [self willChange:NSKeyValueChangeRemoval valuesAtIndexes:indexes forKey:kItemsKey];
        NSMutableOrderedSet *tmpOrderedSet = [NSMutableOrderedSet orderedSetWithOrderedSet:[self mutableOrderedSetValueForKey:kItemsKey]];
        [tmpOrderedSet removeObjectAtIndex:idx];
        [self setPrimitiveValue:tmpOrderedSet forKey:kItemsKey];
        [self didChange:NSKeyValueChangeRemoval valuesAtIndexes:indexes forKey:kItemsKey];
    }
    
    - (void)insert<#Property#>:(NSArray *)values atIndexes:(NSIndexSet *)indexes {
        [self willChange:NSKeyValueChangeInsertion valuesAtIndexes:indexes forKey:kItemsKey];
        NSMutableOrderedSet *tmpOrderedSet = [NSMutableOrderedSet orderedSetWithOrderedSet:[self mutableOrderedSetValueForKey:kItemsKey]];
        [tmpOrderedSet insertObjects:values atIndexes:indexes];
        [self setPrimitiveValue:tmpOrderedSet forKey:kItemsKey];
        [self didChange:NSKeyValueChangeInsertion valuesAtIndexes:indexes forKey:kItemsKey];
    }
    
    - (void)remove<#Property#>AtIndexes:(NSIndexSet *)indexes {
        [self willChange:NSKeyValueChangeRemoval valuesAtIndexes:indexes forKey:kItemsKey];
        NSMutableOrderedSet *tmpOrderedSet = [NSMutableOrderedSet orderedSetWithOrderedSet:[self mutableOrderedSetValueForKey:kItemsKey]];
        [tmpOrderedSet removeObjectsAtIndexes:indexes];
        [self setPrimitiveValue:tmpOrderedSet forKey:kItemsKey];
        [self didChange:NSKeyValueChangeRemoval valuesAtIndexes:indexes forKey:kItemsKey];
    }
    
    - (void)replaceObjectIn<#Property#>AtIndex:(NSUInteger)idx withObject:(<#Type#> *)value {
        NSIndexSet* indexes = [NSIndexSet indexSetWithIndex:idx];
        [self willChange:NSKeyValueChangeReplacement valuesAtIndexes:indexes forKey:kItemsKey];
        NSMutableOrderedSet *tmpOrderedSet = [NSMutableOrderedSet orderedSetWithOrderedSet:[self mutableOrderedSetValueForKey:kItemsKey]];
        [tmpOrderedSet replaceObjectAtIndex:idx withObject:value];
        [self setPrimitiveValue:tmpOrderedSet forKey:kItemsKey];
        [self didChange:NSKeyValueChangeReplacement valuesAtIndexes:indexes forKey:kItemsKey];
    }
    
    - (void)replace<#Property#>AtIndexes:(NSIndexSet *)indexes with<#Property#>:(NSArray *)values {
        [self willChange:NSKeyValueChangeReplacement valuesAtIndexes:indexes forKey:kItemsKey];
        NSMutableOrderedSet *tmpOrderedSet = [NSMutableOrderedSet orderedSetWithOrderedSet:[self mutableOrderedSetValueForKey:kItemsKey]];
        [tmpOrderedSet replaceObjectsAtIndexes:indexes withObjects:values];
        [self setPrimitiveValue:tmpOrderedSet forKey:kItemsKey];
        [self didChange:NSKeyValueChangeReplacement valuesAtIndexes:indexes forKey:kItemsKey];
    }
    
    - (void)add<#Property#>Object:(<#Type#> *)value {
        NSMutableOrderedSet *tmpOrderedSet = [NSMutableOrderedSet orderedSetWithOrderedSet:[self mutableOrderedSetValueForKey:kItemsKey]];
        NSUInteger idx = [tmpOrderedSet count];
        NSIndexSet* indexes = [NSIndexSet indexSetWithIndex:idx];
        [self willChange:NSKeyValueChangeInsertion valuesAtIndexes:indexes forKey:kItemsKey];
        [tmpOrderedSet addObject:value];
        [self setPrimitiveValue:tmpOrderedSet forKey:kItemsKey];
        [self didChange:NSKeyValueChangeInsertion valuesAtIndexes:indexes forKey:kItemsKey];
    }
    
    - (void)remove<#Property#>Object:(<#Type#> *)value {
        NSMutableOrderedSet *tmpOrderedSet = [NSMutableOrderedSet orderedSetWithOrderedSet:[self mutableOrderedSetValueForKey:kItemsKey]];
        NSUInteger idx = [tmpOrderedSet indexOfObject:value];
        if (idx != NSNotFound) {
            NSIndexSet* indexes = [NSIndexSet indexSetWithIndex:idx];
            [self willChange:NSKeyValueChangeRemoval valuesAtIndexes:indexes forKey:kItemsKey];
            [tmpOrderedSet removeObject:value];
            [self setPrimitiveValue:tmpOrderedSet forKey:kItemsKey];
            [self didChange:NSKeyValueChangeRemoval valuesAtIndexes:indexes forKey:kItemsKey];
        }
    }
    
    - (void)add<#Property#>:(NSOrderedSet *)values {
        NSMutableOrderedSet *tmpOrderedSet = [NSMutableOrderedSet orderedSetWithOrderedSet:[self mutableOrderedSetValueForKey:kItemsKey]];
        NSMutableIndexSet *indexes = [NSMutableIndexSet indexSet];
        NSUInteger valuesCount = [values count];
        NSUInteger objectsCount = [tmpOrderedSet count];
        for (NSUInteger i = 0; i < valuesCount; ++i) {
            [indexes addIndex:(objectsCount + i)];
        }
        if (valuesCount > 0) {
            [self willChange:NSKeyValueChangeInsertion valuesAtIndexes:indexes forKey:kItemsKey];
            [tmpOrderedSet addObjectsFromArray:[values array]];
            [self setPrimitiveValue:tmpOrderedSet forKey:kItemsKey];
            [self didChange:NSKeyValueChangeInsertion valuesAtIndexes:indexes forKey:kItemsKey];
        }
    }
    
    - (void)remove<#Property#>:(NSOrderedSet *)values {
        NSMutableOrderedSet *tmpOrderedSet = [NSMutableOrderedSet orderedSetWithOrderedSet:[self mutableOrderedSetValueForKey:kItemsKey]];
        NSMutableIndexSet *indexes = [NSMutableIndexSet indexSet];
        for (id value in values) {
            NSUInteger idx = [tmpOrderedSet indexOfObject:value];
            if (idx != NSNotFound) {
                [indexes addIndex:idx];
            }
        }
        if ([indexes count] > 0) {
            [self willChange:NSKeyValueChangeRemoval valuesAtIndexes:indexes forKey:kItemsKey];
            [tmpOrderedSet removeObjectsAtIndexes:indexes];
            [self setPrimitiveValue:tmpOrderedSet forKey:kItemsKey];
            [self didChange:NSKeyValueChangeRemoval valuesAtIndexes:indexes forKey:kItemsKey];
        }
    }
    

提交回复
热议问题