Поскольку после почти целого дня никто не предложил никаких ответов, я собираюсь опубликовать здесь дикое предположение: вы не случайно используете строку, которую хотите вывести (с символами процента в ней), в качестве формат строки ты?
То есть, совершив ошибку, сделав:
NSLog(@"In format strings you can use %@ as a placeholder for an object, and %i for a plain C integer.")
Вместо:
NSLog(@"%@", @"In format strings you can use %@ as a placeholder for an object, and %i for a plain C integer.");
Но я буду удивлен, если это окажется причиной вашей проблемы, так как обычно это приводит к случайному выводу, а не к абсолютному выводу. И в некоторых случаях Xcode также выдает предупреждения компилятора об этом (когда я пытался NSLog(myString)
, я получал «предупреждение: форматировать не строковый литерал и не форматировать аргументы»).
Так что не стреляйте в меня, если этот ответ не поможет. Было бы легче ответить на ваш вопрос, если бы вы могли показать нам больше вашего кода регистрации. Что касается предоставленной вами строки, я не могу обнаружить в ней ничего плохого.
Редактировать: Упс, я как-то упустил, что вы упомянули, что вы используете writeToFile:atomically:encoding:error:
для записи строки в файл, так что даже более вероятно, что вы случайно обработаете ее как строку формата где-то. Но я собираюсь оставить этот ответ пока. Опять же, вы действительно должны показать нам больше своего кода, хотя ...
Редактировать: Что касается вашего вопроса о методе в NSString, который имеет аналогичные функции кодирования процентов, это будет stringByAddingPercentEscapesUsingEncoding:
. Я не уверен, о каких проблемах вы думаете, когда говорите, что слышали, что это не всегда работает. Но одна вещь состоит в том, что CFURLCreateStringByAddingPercentEscapes
позволяет вам указать дополнительные символы, которые обычно не должны быть экранированы, но которые вы все еще хотите экранировать, в то время как метод NSString не позволяет вам указать это.