Подтвердить что ты не робот

NSString stringWithContentsOfFile не работает с кодом ошибки

Я пытаюсь загрузить файл в строку. Вот код, который я использую:

NSError *error = nil;
NSString *fullPath = [[NSBundle mainBundle] pathForResource:filename 
                                                     ofType:@"html"];
NSString *text = [NSString stringWithContentsOfFile:fullPath 
                                           encoding:NSUTF8StringEncoding 
                                              error:&error];

Когда он передается в @ "about" в качестве имени файла, он работает абсолютно нормально, показывая, что код работает. Когда в имени файла @ "eula" передается имя файла, он терпит неудачу с "Cocoa ошибка 258", которая переводится в NSFileReadInvalidFileNameError. Однако, если я меняю содержимое файлов, но сохраняю имена одинаковыми, другой файл не удается доказать, что нет ничего плохого в имени файла, это как-то связано с контентом.

О файле достаточно простой HTML, но файл eula - это огромный беспорядок, экспортированный из Word юридическим отделом.

Кто-нибудь знает что-либо внутри HTML файла, который может вызвать эту ошибку?

Большое спасибо,

Сэм

4b9b3361

Ответ 1

Ошибка почти наверняка заключается в том, что ваш файл не находится в UTF-8, но вы правы, что звучит как ошибка в отчете об ошибке.

Откройте файл eula с помощью BBEdit (или свободного TextWrangler) и посмотрите, какую кодировку он использует. Измените кодировку на UTF-8 и сохраните ее. Разделите два файла, чтобы увидеть, какие отличия появились. Замените исходный файл на новый (исправляя любые сбои).

Если это решает проблему, используйте Apple Bug Reporter, чтобы сообщить об ошибке в отчете об ошибке.

Ответ 2

Я только что провел 45 минут с этой проблемой, только в моем случае решение было глупо, и проблема немного отличалась.

  • У меня был файл с именем Playlist.txt в моем каталоге ресурсов. Это было очень просто.
  • Файл был изменен в одной точке из XCode.
  • Файл перестает правильно загружаться с той же ошибкой, что и выше. Однако он никогда не перемещался и не изменялся его тип кодирования.
  • Я сделал команду-I (Get Info) в файле в каталоге XCode, он сказал мне, что это UTF-8 (как и ожидалось).
  • Я попробовал "usedEncoding" способ чтения файлов, без кубиков. Такая же ошибка, кодировка была возвращена null.
  • Наконец, я удалил файл из XCode, снова перетащил его и выполнил Очистить все. Это устранило проблему.

Это не первый случай, когда XCode магически кэширует вещи (неправильно), вызвало у меня часы и часы впустую. Если у вас есть такая ошибка, которая не имеет смысла, попробуйте удалить и заменить файлы и очистить все цели.

Ответ 3

У меня была такая же ошибка с вами, используйте имя файла с  [[NSBundle mainBundle] pathForResource: @ "pageList" ofType: @ "txt" ]] удачи!

Ответ 4

Наиболее вероятной причиной отказа +stringWithContentsOfFile:encoding:error: в этом случае было бы, если вы указали неверную кодировку. Вы уверены, что ваш файл @"eula" закодирован в UTF8?

Если вы не уверены в кодировке файла, вы всегда можете попробовать +stringWithContentsOfFile:usedEncoding:error: и посмотреть, работает ли он и что это кодирование.

Ответ 5

Не знаю, была ли это ваша проблема, но у меня просто была аналогичная вещь (stringWithContentsOfFile, нет JSON), и проблема заключалась в том, что в файле были линии линии CRLF (окна) и Western-whatever-it-called кодирование. Я использовал SubEthaEdit для преобразования в LF и UTF-8, и все работает нормально.

Ответ 6

Я столкнулся с той же ошибкой.

Когда я немного поиграл, оказалось, что я не включал файл в ресурсы пакета для копирования целевого объекта.

Я сделал это, и все получилось отлично.

Но, надо сказать, ошибка настолько вводит в заблуждение по такой простой причине. Просто плохое предположение от Xcode