Objective c 更新NSArray上的值

Objective c 更新NSArray上的值,objective-c,ios,xcode,Objective C,Ios,Xcode,我遇到了这样的问题。我需要更新NSArray中的值。我不知道怎么做。这是我的数组 NSArray *arrayWithInfo = [[NSArray alloc] initWithObjects:AMLocalizedString(@"Status", nil),AMLocalizedString(@"Call", nil),AMLocalizedString(@"Location", nil),AMLocalizedString(@"Control", nil),AMLocalizedStr

我遇到了这样的问题。我需要更新NSArray中的值。我不知道怎么做。这是我的数组

NSArray *arrayWithInfo = [[NSArray alloc] initWithObjects:AMLocalizedString(@"Status", nil),AMLocalizedString(@"Call", nil),AMLocalizedString(@"Location", nil),AMLocalizedString(@"Control", nil),AMLocalizedString(@"Sim", nil),AMLocalizedString(@"Object", nil),AMLocalizedString(@"Info", nil),nil];
self.dataArray = arrayWithInfo;
[arrayWithInfo release];
更具体地说,我用这个数组初始化了tableview。用户可以使用不同的本地化字符串,所以我必须更新它。使用
[tableview reloadData]
i'v得到了要更新的表,但是NSArray中的值与最初初始化时的值保持一致


那么,如何让数组再次查找字符串并获取它们的新值呢?

使用NSMutableArray而不是NSArray


NSMutableArray(以及名称中包含Mutable的所有其他类)可以修改。

您需要使用
NSMutableArray
NSArray
是不可变的。

您应该使用。这样做将允许您在实例化后更改其值。

您的数组在这里不需要是可变的,因为数组似乎是全部或无。您没有提到删除某些对象而不是其他对象的要求<不需要代码>NSMUTABLEARRY。您希望为数组编写一个延迟加载getter方法,如果数组不存在,它将重新实例化它

-(NSArray *)dataArray{
    if (_dataArray){
        return _dataArray;
    }

    _dataArray = NSArray *arrayWithInfo = [[NSArray alloc] initWithObjects:AMLocalizedString(@"Status", nil),AMLocalizedString(@"Call", nil),AMLocalizedString(@"Location", nil),AMLocalizedString(@"Control", nil),AMLocalizedString(@"Sim", nil),AMLocalizedString(@"Object", nil),AMLocalizedString(@"Info", nil),nil];
    return _dataArray;
}
然后,当您要重新加载tableView时

self.dataArray = nil;
[tableView reloadData];
这将破坏旧阵列,迫使其重新制作,但采用新的本地化

编辑:


问题在于数组没有存储语句
AMLocalizedString(@“Status”,nil)
而是存储该语句的结果,即本地化字符串本身。如果不重新创建整个数组或使用
NSMutableArray
并更改所有对象,就无法使数组重新计算该语句。惰性加载getter方法更多地采用objective-c风格。

NSArray
是不可变的,您必须使用
NSMutableArray
,您可以在运行时修改它的内容。我还要提到的是,您的初始数组似乎没有改变,因为您每次都在创建一个新数组,但是在您的tableview中仍然有对“old”数组的引用。我们需要有关
AMLocalizedString
定义的更多信息。另外,请检查NSArray和NSMutablearray之间的差异。我不需要更改数组中的值。如何使数组获得存储在AMLocalizedString(@“Status”,nil)中的新值?我知道mutable和nsarray之间的区别,我希望有一种方法可以让数组更新它的值,而不必再次初始化它们。@Datenshi没有一种方法可以让数组像你想要的那样更新。再次初始化数组不会花费很长时间,这是实现所需目标的常用方法。我不需要更改数组中的值。如何使数组获得存储在AMLocalizedString中的新值(@“Status”,nil)?@Datenshi如果
AMLocalizedString
存储在数组中,则必须更新数组中的值。