从文件加载NSNumbers数组并使其可变

时间:2011-08-09 12:41:28

标签: iphone load

我考虑过的一种方法是创建一个临时数组并将NSNumbers数组加载到其中,然后分配可变数组,然后如果加载的数组不是nil或空addObject:[NSNumber numberWithInt:[[temparr objectAtIndex:i] intValue]],但似乎如此迂回的做法。

这样我就可以修改应用中的数字和数组内容。

是否有更短,更直接的方法来做同样的事情?从某个地方加载数组/ dicts只是为了找到它们的内容是不可变的,这是很常见的,我想学习最简单的方法。

2 个答案:

答案 0 :(得分:1)

你不能使NSNumber个对象变得可变,它们是设计上的不可变对象。

如果要创建数组的可变深层副本,即数组的可变副本及其内容的可变副本(如果可能;例如,在NSNumber s的情况下不能),你可以做这样的事情:

@interface NSArray (MutableCopyDeep)
- (NSMutableArray *) mutableCopyDeep;
@end

@implementation NSArray (MutableCopyDeep)

- (NSMutableArray *) mutableCopyDeep {
    NSMutableArray *returnAry = [[NSMutableArray alloc] initWithCapacity:[self count]];
    for (id anObject in self) {
        id aCopy = nil;
        if ([anObject respondsToSelector:@selector(mutableCopyDeep)]) {
            aCopy = [anObject mutableCopyDeep];
        } else if ([anObject respondsToSelector:@selector(mutableCopyWithZone:)]) {
            aCopy = [anObject mutableCopy];
        } else if([anObject respondsToSelector:@selector(copyWithZone:)]) {
            aCopy = [anObject copy];
        } else {
            aCopy = [anObject retain];
        }

        [returnAry addObject:aCopy]; 
        [aCopy release];
    }

    // Method name prefixed with "mutableCopy" indicates that the returned
    // object is owned by the caller as per the Memory Management Rules.
    return returnAry;
} 

@end

答案 1 :(得分:0)

您不能将NSNumbers放在可变数组中,并希望能够更改其值。有关我使用的解决方法,请参阅问题中的代码。