Не могу прочитать файл в XCODE 4.2, работал в 4.0? - PullRequest
1 голос
/ 10 ноября 2011

Я обновился с XCODE 4 до 4.2 и теперь у меня проблемы.

Следующий код работал до 4.2 для чтения файла в "filePath":

// Fill myString with questions from the .txt file and then read .txt file
NSString *filePath = whatFile; 
NSString *myString = [[NSString alloc] initWithContentsOfFile:filePath];

// Load array
NSArray* myArray = [myString componentsSeparatedByString:@"\r"];
NSLog (@"\n \n Number of elements in myArray = %i", [myArray count]);

С 4.2 устаревший initWithContentsOfFile в следующей строке кода:

NSString *myString = [[NSString alloc] initWithContentsOfFile:filePath];

... и должны быть заменены на приведенные ниже в соответствии с руководством:

NSString *myString = [NSString stringWithContentsOfFile:filePath encoding: NSUTF8StringEncoding error:&err];

и я не могу заставить это читать записи в одном и том же файле, заменив строку кода. Кстати, я определил & err.

Когда я NSLog myString, я получаю (ноль).

Я немного отчаянно пытаюсь решить эту проблему и буду очень признателен за любую помощь.

Приветствия

Ответы [ 3 ]

1 голос
/ 10 ноября 2011

Попробуйте:

    NSError* error = nil;
    NSStringEncoding encoding;
    NSString *fileContent = [NSString stringWithContentsOfFile:filePath usedEncoding:&encoding error:&error];

Если это не сработает, попробуйте ввести код: NSASCIIStringEncoding

1 голос
/ 10 ноября 2011

NSLog переменная err, если есть ошибка. Также NSLog filePath.

Возможно, кодировка не UTF-8, вы уверены в кодировке?

Лучшая ставка для кодировки не-UTF-8 - NSMacOSRomanStringEncoding, которая поддерживает 8-битные символы.

0 голосов
/ 10 ноября 2011

Файл, вероятно, не содержит строку в кодировке UTF8.См. Документацию Apple, в которой есть пример чтения файла, в котором вы не знаете кодировку: Чтение данных с неизвестной кодировкой

Вам необходимо использовать метод [string|init]WithContentsOfFile:usedEncoding:error, и еслиесли это не удалось, есть еще несколько вещей, которые вы можете попробовать, прежде чем, наконец, представить сообщение об ошибке пользователю (например, попробуйте прочитать его как NSAttributedString).

Например, вы можете сделать это:

// Fill myString with questions from the .txt file and then read .txt file
NSString *filePath = whatFile; 
NSStringEncoding encoding;
NSError *error;
NSString *myString = [[NSString alloc] initWithContentsOfFile:filePath usedEncoding:&encoding error:&error];

if (!myString) {
  myString = [[NSString alloc] encoding:NSUTF8StringEncoding error:&error]
}

if (!myString) {
  myString = [[NSString alloc] encoding:NSISOLatin1StringEncoding error:&error]
}

if (!myString) {
  NSLog(@"error: %@", error);
  return;
}


// Load array
NSArray* myArray = [myString componentsSeparatedByString:@"\r"];
NSLog (@"\n \n Number of elements in myArray = %i", [myArray count]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...