NSMutableArray removeObjectAtIndex,但后来我需要向下移动

时间:2011-07-11 19:12:15

标签: iphone objective-c xcode nsmutablearray

所有

我有一个存储在NSMutableArray中的字符串。当代码中的其他位置满足某个条件时,NSMutableArray(read,objectAtIndex:0)中FIRST的对象将被删除。删除之后,我需要将所有内容都移到索引中。这是我的例子:

/*
    Index/Value
    0 - one
    1 - two
    2 - three
    3 - four
    4 - five
    5 - six
    6 - seven
*/
//removes object...
[mArray removeObjectAtIndex:0];
//I am missing something here...


//I want the value of the array to be as follows:
/*
    Index/Value
    0 - two
    1 - three
    2 - four
    3 - five
    4 - six
    5 - seven
*/

我错过了什么?

编辑:NSMutableArray存储在NSUserDefaults中。这可能导致这种情况无效吗?

EDIT2:因为它存储在NSUserDefaults中,所以它会变为不可变。查看接受的答案,了解正确的方法。详情请点击crashes my app [NSMutableArray1 removeAllObjects] iphone sdk

3 个答案:

答案 0 :(得分:7)

你没有遗漏任何东西。在索引0处删除对象后,索引将完全相同。

答案 1 :(得分:6)

如果我正确理解了您的问题,那么您将NSMutableArray存储到NSUserDefaults,然后当您从NSUserDefaults加载它时,它会在您尝试变异时抛出错误?

这是因为当您从NSUserDefaults检索数组时,它将是一个NSArray而不是NSMutableArray的实例,因此您需要创建NSMutableArray的实例才能使用

NSMutableArray *mArray = [[NSMutableArray alloc] initWithArray:myArrayFromNSUserDefaults];

答案 2 :(得分:0)

那应该有用。你在做这样的事吗?

    NSMutableArray *mArray = [[NSMutableArray alloc]init];
    [mArray addObject:@"one"];
    [mArray addObject:@"two"];
    [mArray addObject:@"three"];

    [mArray removeObjectAtIndex:0];

    NSLog(@"mArray at 0: %@",[mArray objectAtIndex:0]);