0

以下代码在 Xcode 4.5 中工作:在带有图像的 ViewController 中,从带有图像描述的 URL 加载文件:文件名已本地化,以便根据意大利语或英文设置。


NSString *stringaLocalizzata = (NSString *) NSLocalizedString(@"DISCO1_PAGE",nil);
/* Localized file name that contains the object description in english or italian
/* values: 1_locale_en.txt for english
/*         1_locale.txt for italian


NSString *bioLocaleUrl =[[[@"http://" stringByAppendingString:aConstrants.disco_url]stringByAppendingString:aConstrants.doc_dir] //stringByAppendingString:stringaLocalizzata];
       stringByAppendingString:stringaLocalizzata];

NSURL *bioLocaleUrlVersion = [NSURL URLWithString: bioLocaleUrl];
NSError *error = nil;
NSString *bioLocaleWebVersion = [NSString stringWithContentsOfURL:bioLocaleUrlVersion encoding:1 error:&error];

 _bioLocale.text=bioLocaleWebVersion;

使用 Xcode5 它不再起作用:一开始我认为这是一个问题,但真正的问题是 NSURL *bioLocaleUrlVersion = [NSURL URLWithString: bioLocaleUrl]; 运行时结果为零。

如果我以这种方式更改代码:


NSString *bioLocaleUrl =[[[@"http://" stringByAppendingString:aConstrants.disco_url]stringByAppendingString:aConstrants.doc_dir] //stringByAppendingString:stringaLocalizzata];
       stringByAppendingString:@"1_locale_en.txt"];

那么 *bioLocaleUrlVersion 不会是 nil 并且一切正常。当然,我可以用不同的方式处理这个问题,但我想知道问题出在哪里。谢谢。

4

1 回答 1

1

尝试NSURL使用无效的 URL 字符串创建对象将返回nil。您的混乱stringByAppendingString:调用中的某些内容导致了无效的 URL 字符串(NSURL有关被认为有效的内容的完整详细信息,请参阅类参考的顶部。

在不知道 的价值的情况下bioLocaleUrl,我无法给出更具体的建议。

不过,我强烈建议使用操作系统更合适的例程。从 iOS 7 开始,NSURLComponents这是一个不错的选择:

NSURLComponents *components = [[NSURLComponents alloc] init];
components.scheme = @"http";
components.host = aConstrants.disco_url;
components.path = [aConstrants.doc_dir stringByAppendingPathComponent:stringaLocalizzata];

(根据您在问题中的代码,这似乎是合理的)

对于较旧的操作系统版本,我建议-[NSURL URLByAppendingPathComponent:]是您的朋友。

于 2013-10-02T11:32:44.217 回答