If NSString stringWithContentsOfFile is deprecated, what is its replacement?

≯℡__Kan透↙ 提交于 2019-12-04 17:39:51

问题


I have some sample code from Tuaw which is probably 3 releases old ;) The compiler is issuing a warning that the method is deprecated, but I do not see that mentioned in the SDK docs. If it is deprecated, there must be an alternative approach or replacement method. Does anyone know what the replacement is for this method?

The specific code was:

NSArray *crayons = [[NSString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"crayons" ofType:@"txt"]] componentsSeparatedByString:@"\n"];

The modified code (in discrete idiot steps - and no error handling) is:

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:


A more capable method replaced the old one. Use:

+ (id)stringWithContentsOfFile:(NSString *)path
                  usedEncoding:(NSStringEncoding *)enc
                         error:(NSError **)error

Enjoy! Check out the documentation for more information.




回答2:


Here's an example, adding to Carl Norum's correct answer.

Note the ampersand & prepended to the passed error variable.

// 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);
    // …
}
  • If you know the encoding, you specify that encoding by calling the + stringWithContentsOfFile:encoding:error: method.
  • If you do not know the character encoding and want iOS to guess, call the + stringWithContentsOfFile:usedEncoding:error: method which communicates back to you the detected encoding by setting the value of the usedEncoding argument. For discussion, see this other question.

Bit of advice… Always make an attempt to know the character encoding of your file. Guessing is risky business.



来源:https://stackoverflow.com/questions/2954892/if-nsstring-stringwithcontentsoffile-is-deprecated-what-is-its-replacement

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!