0

以下のコードで NSMutableArray をコピーしたい:

SectionArray *newSectionArray = [[SectionArray alloc] init];    
NSMutableArray *itemsCopy = [self.sections mutableCopy];
newSectionArray.sections = [[NSMutableArray alloc] initWithArray:itemsCopy copyItems:YES];

しかし、この新しい配列にオブジェクトを設定しようとするとエラーが発生します:

[[self.sections objectAtIndex:intSection] replaceObjectAtIndex:intRow withObject:object];

[__NSArrayI replaceObjectAtIndex:withObject:]: unrecognized selector sent to instance 0x7191720

私も試しました:

SectionArray *newSectionArray = [[SectionArray alloc] init];    
newSectionArray.sections = [[[NSMutableArray alloc] initWithArray:itemsCopy copyItems:YES] mutableCopy];

私の SectionArray クラス:

@implementation SectionArray

@synthesize sections;
@synthesize value;

- initWithSectionsForWayWithX:(int)intSections andY:(int)intRow {
    NSUInteger i;
    NSUInteger j;

    if ((self = [self init])) {
        sections = [[NSMutableArray alloc] initWithCapacity:intSections];
        for (i=0; i < intSections; i++) {
            NSMutableArray *a = [NSMutableArray arrayWithCapacity:intRow];
            for (j=0; j < intRow; j++) {
                Node * node = [[Node alloc] initNodeWithX:i  andY:j andValeur:0];
                [a insertObject:node atIndex:j];
            }
            [sections addObject:a];
        }
    }
    return self;
}

- (void)setObjectForNode:(Node *)object andX:(int)intSection andY:(int)intRow {

    [[sections objectAtIndex:intSection] replaceObjectAtIndex:intRow withObject:object];
}

- (SectionArray *) copy {
    ...
}

@終わり

4

1 に答える 1

0

私が正しく見れば、それsectionsは可変配列ですが、その要素は

[sections objectAtIndex:intSection]

不変配列であるため、で例外が発生します

[[sections objectAtIndex:intSection] replaceObjectAtIndex:intRow withObject:object];

その理由は、ここに項目をコピーcopyItems:YESするためです ( ):

newSectionArray.sections = [[NSMutableArray alloc] initWithArray:itemsCopy copyItems:YES];

したがって、itemsCopyが可変配列の配列であっても、これらの要素のコピーは不変です。

追加:ネストされた配列の「ネストされた変更可能なコピー」の場合、次のように処理できます。

SectionArray *newSectionArray = [[SectionArray alloc] init];
newSectionArray.sections = [[NSMutableArray alloc] init];
for (NSUInteger i=0; i < [sections count]; i++) {
    NSMutableArray *a = [[sections objectAtIndex:i] mutableCopy];
    [newSectionArray.sections addObject:a];
}
于 2013-03-30T20:04:44.293 に答える