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

Если 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];               
4b9b3361

Ответ 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);
    // …
}

Немного советы... Всегда пытайтесь узнать кодировку вашего файла. Угадание - рискованный бизнес.