Если NSString stringWithContentsOfFile устарел, какова его замена?
У меня есть пример кода из Tuaw, который, вероятно, 3 выпуска старых;) Компилятор выдает предупреждение о том, что метод устарел, но я не вижу этого в документах SDK. Если он устарел, должен быть альтернативный подход или метод замены. Кто-нибудь знает, что замена для этого метода?
Конкретный код:
NSArray *crayons = [[NSString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"crayons" ofType:@"txt"]] componentsSeparatedByString:@"\n"];
Измененный код (в дискретных шагах идиот - без обработки ошибок):
NSError *error;
NSString *qs = [[NSBundle mainBundle] pathForResource: @"crayons" ofType: @"txt"];
NSString *ps = [[NSString alloc] stringWithContentsOfFile:qs encoding:NSUTF8StringEncoding error: &error];
NSArray *crayons = [[NSArray alloc] arrayWithContentsOfFile: ps];
Ответы
Ответ 1
Более способный метод заменил старый. Использование:
+ (id)stringWithContentsOfFile:(NSString *)path
usedEncoding:(NSStringEncoding *)enc
error:(NSError **)error
Наслаждайтесь! Подробнее см. documentation.
Ответ 2
Вот пример, добавляющий к правильный ответ Карла Норума.
Обратите внимание на амперсанд &
, добавленный к переданной переменной ошибки.
// The source text file is named "Example.txt". Written with UTF-8 encoding.
NSString* path = [[NSBundle mainBundle] pathForResource:@"Example"
ofType:@"txt"];
NSError* error = nil;
NSString* content = [NSString stringWithContentsOfFile:path
encoding:NSUTF8StringEncoding
error:&error];
if(error) { // If error object was instantiated, handle it.
NSLog(@"ERROR while loading from file: %@", error);
// …
}
Немного советы... Всегда пытайтесь узнать кодировку вашего файла. Угадание - рискованный бизнес.