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

Bau*_*aub 0 iphone xcode objective-c 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
*/
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

编辑:NSMutableArray存储在NSUserDefaults中.这可能导致这不起作用吗?

EDIT2:因为它存储在NSUserDefaults中,所以它变为不可变.查看接受的答案,了解正确的方法.详细信息:崩溃我的应用程序[NSMutableArray1 removeAllObjects] iphone sdk

omz*_*omz 7

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

  • NSUserDefaults始终返回不可变数组.虽然你将它设置为可变,但它将返回不可变,因此当获取值时,也调用mutableCopy. (7认同)

Pau*_*l.s 6

如果我正确理解你的问题你正在存储一个NSMutableArrayto NSUserDefaults然后当你加载它时NSUserDefaults它会在你尝试变异时引发错误?

这是因为当你从该数组检索NSUserDefaults这将是一个实例NSArray并不NSMutableArray因此你需要做的一个实例NSMutableArray一起工作.

NSMutableArray *mArray = [[NSMutableArray alloc] initWithArray:myArrayFromNSUserDefaults];
Run Code Online (Sandbox Code Playgroud)