сбои stringWithUTF8String, но только иногда

У меня есть следующий бит кода:

NSData *data = [NSData dataWithContentsOfFile:filePath options:0 error:&fileError];
NSString *recipe = @"";
if (fileError == nil) {
     recipe = [NSString stringWithUTF8String:[data bytes]];
     NSLog(@"Converted Recipe as: %@",recipe);
     NSLog(@"Original Data was: %@",data);  
} else {
     NSLog(@"Error reading file: %@", [fileError localizedDescription]);
}

Проблема состоит в том, что иногда stringWithUTF8String возвращает пустой указатель, и иногда он правильно возвращает содержание файла... ТОТ ЖЕ файл. Иногда это работает, и иногда это не делает. Вот отрывок от журнала, когда он не делает.... Что означает для меня, что чтение файла работает, но по некоторым причинам преобразование перестало работать на этот раз. Если я делаю это снова (это называют как результат tableView didSelectRowAtIndexPath: Таким образом, я могу просто нажать на другую строку и затем возвратиться этому.

2010-08-01 16:14:29.031 RecipeBrowse[52056:207] Converted Recipe as: (null)
2010-08-01 16:14:29.037 RecipeBrowse[52056:207] Original Data was: <426c6163 6b656e65 64204361 626f2046 69736820 5461636f 730a0a49 4e475245 4449454e 54533a0a 0a2d200a 0a0a4d45 54484f44 3a0a0a42 4c41434b 454e4544 20434142 4f204649 53482054 41434f53 

Какие-либо идеи, как сделать это более надежным??

17
задан Vladimir 1 August 2010 в 21:47
поделиться

1 ответ

+stringWithUTF8String: предполагает, что его входные данные являются NUL-терминированной строкой, но NSData не помещает туда никакого определенного терминатора. Вместо этого создайте свою строку с помощью -initWithBytes:length:encoding:, поскольку вы знаете длину данных.

32
ответ дан 30 November 2019 в 11:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: