重写 NSMutableArray 中的值

Rewriting the values in NSMutableArray

我有一个应用允许用户在英语和威尔士语之间更改某些内容的语言。以下用于填充名为 commentsNSMutableArray。第一次使用代码时它工作正常,但如果随后更改语言,comments 数组将不会加载不同的注释集。我怀疑我需要在每次访问代码时清除 NSMutableArray。首先,是这样吗?如果是这样,如果 comments = nil 不这样做,我该怎么做?

+ (NSMutableArray *)comments {
static NSMutableArray *comments = nil;
static dispatch_once_t onceToken;

if ([language isEqualToString: @"Eng"])
{
dispatch_once(&onceToken, ^{
comments = [NSMutableArray arrayWithObjects:
               @"Eng1",
               @"Eng2",
               @"Eng3",
               nil];
    });
}

if ([language isEqualToString: @"Wel"])
{
dispatch_once(&onceToken, ^{
comments = [NSMutableArray arrayWithObjects:
                @"Welsh 1",
                @"Welsh 2",
                @"Welsh 3",
                nil];
    });
}

return comments;
}
}

dispatch_once 使块在整个应用程序的生命周期内永远 执行一次。

相反,您可能只想做一个简单的 nil 检查。

static NSMutableArray *comments = nil;
+ (NSMutableArray *)comments {
  if (!comments)
  {
    if ([language isEqualToString: @"Eng"])
    {
      comments = [NSMutableArray arrayWithObjects:
                  @"Eng1",
                  @"Eng2",
                  @"Eng3",
                  nil];
    }
    else if ([language isEqualToString: @"Wel"])
    {
      comments = [NSMutableArray arrayWithObjects:
                  @"Welsh 1",
                  @"Welsh 2",
                  @"Welsh 3",
                  nil];
    }
  }
  return comments;
}

+ (void)changeLanguage:(NSString *)newLanguage {
  language = newLanguage;
  comments = nil;
}