Изменить размер NSArray программно - PullRequest
4 голосов
/ 24 октября 2010

Я пытался выяснить, возможно ли программно изменить размер NSArray, используя код, подобный следующему:

NSArray *resize = [NSArray arrayResized:oldarray size:10];

Что будет новым NSArray (а не NSMutableArray, если это возможно), с элементами после конца oldarray, дополненными [NSNull null].

Ответы [ 3 ]

2 голосов
/ 24 октября 2010

Хотя ваш вопрос заслуживает ответа «Что вы действительно пытаетесь сделать?», Вот возможное решение:

@interface NSArray (RCArrayAdditions)
- (NSArray *)arrayByAppendingWithNulls:(NSUInteger)numberOfAppendedNulls;
@end

@implementation NSArray (RCArrayAdditions)
- (NSArray *)arrayByAppendingWithNulls:(NSUInteger)numberOfAppendedNulls {
    NSMutableArray *expandedArray = [self mutableCopy];
    for (NSUInteger i = 0; i < numberOfAppendedNulls; i ++) {
        [expandedArray addObject:[NSNull null]];
    }
    return expandedArray;
}
@end
2 голосов
/ 24 октября 2010

Поскольку объекты NSArray являются неизменяемыми (не могут изменять содержащиеся в них объекты), нет смысла регулировать емкость NSArrays.

Однако вы могли бы написать категорию, которая делала что-то вроде того, что вы хотите:

@interface NSArray (Resizing) 

-(NSArray *) resize:(NSInteger) newSize;

@end

@implementation NSArray (Resizing)

-(NSArray *) resize:(NSInteger) newSize {
   int size = (newSize > [self count]) ? self.count : newSize; 
   NSMutableArray *array = [NSMutableArray arrayWithCapacity:size];
   for(int i = 0; i < size; i++) 
      [array addObject:[self objectAtIndex:i]];
   return [NSArray arrayWithArray:array];
}

@end
0 голосов
/ 24 октября 2010

Вы хотите NSPointerArray .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...