Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone NSLocale设置首选语言_Iphone_Objective C_Nsuserdefaults_Nssortdescriptor_Nslocale - Fatal编程技术网

Iphone NSLocale设置首选语言

Iphone NSLocale设置首选语言,iphone,objective-c,nsuserdefaults,nssortdescriptor,nslocale,Iphone,Objective C,Nsuserdefaults,Nssortdescriptor,Nslocale,我似乎在绕着这个问题转,现在我不想去任何地方 我正试图强制我的应用程序的语言(瑞典语),如下所示 @autoreleasepool { [[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"sv", nil] forKey:@"AppleLanguages"]; [[NSUserDefaults standardUserDefaults]sy

我似乎在绕着这个问题转,现在我不想去任何地方

我正试图强制我的应用程序的语言(瑞典语),如下所示

@autoreleasepool {
    [[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"sv", nil] forKey:@"AppleLanguages"];
    [[NSUserDefaults standardUserDefaults]synchronize];
    return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
我已经在main方法中完成了这项工作,以便在应用程序启动时设置首选项

然后,当我想按字母顺序对数组排序时,我使用带有选择器的
NSSortDescriptor
localizedCaseInsensitiveCompare:

NSSortDescriptor*valueDescriptor=[[NSSortDescriptor alloc]initWithKey:@“iName”升序:是选择器:@选择器(localizedCaseInsensitiveCompare:)]

NSArray*描述符=[NSArray arrayWithObject:valueDescriptor]

self.ingredientsList=[NSMutableArray数组with数组:[self.ingredientsList sortedarray使用描述符:描述符]]

但我的问题是,用我的本地语言进行排序并不是第一次。但如果我重新启动应用程序,排序将根据语言(瑞典语)进行。为什么它不是第一次发生

我做错了什么

欢迎提供帮助/建议。
谢谢

@DarkDust是正确的。您不应该尝试修改区域设置本身。这不在你的控制之下,正如你所看到的,它不太好用。最重要的是,如果您只想修改一个排序操作,这是一个非常大的锤来完成。。。。您可以使用各种本地化
Info.plist
条目(特别是
CFBundleLocalizations
)来正确地执行此操作,而不仅仅是对单个列表进行排序

您要使用的是
compare:options:range:locale:
,它允许您传递特定的语言环境。您可以在
sortedarrayingselector:
sortedarrayingcomparator:
中使用此方法

或者,您可以使用类别将自定义的
swedishCaseInsensitiveCompare:
添加到
NSString
。然后,您可以像当前一样使用
NSSortDescriptor


例如<在英语中,code>a排序在
a
之后,但在瑞典语中排序在
z
之后:

@interface NSString (SwedishSorting)
- (NSComparisonResult)caseInsensitiveSwedishCompare:(id)other;
@end

@implementation NSString (SwedishSorting)
- (NSComparisonResult)caseInsensitiveSwedishCompare:(id)other;
{
  return [self compare:other options:NSCaseInsensitiveSearch range:NSMakeRange(0, self.length) locale:[[NSLocale alloc] initWithLocaleIdentifier:@"sv"]];
}

@end

int main(int argc, const char * argv[])
{

  @autoreleasepool {
    NSArray *array = [@"Jag är en test av sortering" componentsSeparatedByString:@" "];
    NSArray *englishSort = [array sortedArrayUsingDescriptors:[NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"description" ascending:YES selector:@selector(caseInsensitiveCompare:)]]];
    NSLog(@"English = %@", englishSort);

    NSArray *swedishSort = [array sortedArrayUsingDescriptors:[NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"description" ascending:YES selector:@selector(caseInsensitiveSwedishCompare:)]]];

    NSLog(@"Swedish = %@", swedishSort);                                                                
  }
  return 0;
}

首先,你不应该弄乱语言设置!我想要一份瑞典语的清单,按字母顺序排列。(瑞典语按字母顺序排列,而非英语,与用户的电话语言无关)。那么什么是正确的方法呢?@DarkDust那么强制使用应用程序语言是错误的吗?我在整个应用程序中只有一个排序,我希望用瑞典语而不是英语排序。对,以上应该可以做到这一点。修改区域设置会影响排序以外的许多事情。你能给我举个例子吗?当我将设备语言设置为瑞典语时,它工作得非常好。但是,如果我把设备语言转换成英语,排序是用英语完成的,而瑞典字符则放在中间。<代码> NSLALALE * LoaLe= [ [NSLaLaLaLeCal] ]与LoaLeI标识符:@“SE”];SorterDarray=[someArray SorterDarray UsingComparator:^(id a,id b){返回[a比较:b选项:0范围:NSMakerRange(0,a.length)区域设置:区域设置];}];[现场发布]