2

我遇到了这样的问题。我需要更新我的 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];我得到了要更新的表,但 NSArray 中的值与它们最初初始化时保持不变。

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

4

4 回答 4

5

使用NSMutableArray而不是NSArray

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

于 2012-10-30T12:03:41.123 回答
3

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

于 2012-10-30T12:04:26.910 回答
1

您的数组在这里不需要是可变的,因为数组似乎是全部或全部。您没有提到删除某些对象而不是其他对象的要求。NSMutableArray不需要。您想为数组编写一个延迟加载 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风格。

于 2012-10-30T12:12:39.270 回答
0

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

于 2012-10-30T12:04:02.967 回答