ARC 不允许将 'NSStringEncoding'(又名 'unsigned long')隐式转换为 'NSCharacterSet * _Nonnull'

Implicit conversion of 'NSStringEncoding' (aka 'unsigned long') to 'NSCharacterSet * _Nonnull' is disallowed with ARC

在以下代码中我收到错误消息:使用 ARC

不允许将 'NSStringEncoding'(又名 'unsigned long')隐式转换为 'NSCharacterSet * _Nonnull'

我哪里做错了?

NSURL *candidatesURL = [NSURL URLWithString:[str_url
                                             stringByAddingPercentEncodingWithAllowedCharacters:NSUTF8StringEncoding]];

你用错了方法。而不是使用 stringByAddingPercentEncodingWithAllowedCharacters 使用此 stringByAddingPercentEscapesUsingEncoding

如果您不想使用此方法stringByAddingPercentEncodingWithAllowedCharacters,您必须传递一组允许的字符。

试试这个。

NSURL *candidatesURL = [NSURL URLWithString:[str_url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

或者,如果您的应用开发目标是 IOS 9.0 及更高版本。

stringByAddingPercentEscapesUsingEncoding 已弃用,因此您可以使用 stringByAddingPercentEncodingWithAllowedCharacters 并使用 URLHostAllowedCharacterSet

NSURL *candidatesURL = [NSURL URLWithString:[str_url stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLHostAllowedCharacterSet]];