我是Objective-C的新手,我看到有关于错误处理的不同约定.有一些例外,但也有一些情况,如果出现问题,函数应该返回nil.
那么,我如何决定何时使用哪个,以及如何处理异常和意外的返回值?什么是最佳做法和危险信号?
如果我这样做,我只是很好奇.
NSString *fileContents;
NSError *fileError = nil;
fileContents = [[NSString stringWithContentsOfFile:fileOnDisk
encoding:NSMacOSRomanStringEncoding
error:&fileError] retain];
if(fileError != nil) {
NSLog(@"Error : %@", [fileError localizedDescription]);
}
// Other Code ...
[fileContents release];
Run Code Online (Sandbox Code Playgroud)
.
.
NSString *fileOnDisk = @"/Users/Gary/Documents/Xcode/RnD/Maya.MEL";
NSError *fileError; // Should this be *fileError = nil;
NSString *fileContents;
int status = 0;
fileContents = [[NSString stringWithContentsOfFile:fileOnDisk
encoding:NSMacOSRomanStringEncoding
error:&fileError] retain];
if(fileContents == nil) {
NSLog(@"FileError: %@", [fileError localizedDescription]);
status = 1;
} else {
NSLog(@"Success : %@", fileContents);
}
// Clean …Run Code Online (Sandbox Code Playgroud) 很奇怪的问题.我一直在测试我的小命令行程序,它读取一个文件并解析它,它与我的测试数据工作正常,但是当我追求真实的东西时,它找不到文件.
原始文件是通过文本编辑放在一起的文本文件,实际文件是以MS-Dos格式从Microsoft Word保存的.当我试图读取MS Word文件时,它找不到它.我没有收到错误但是从文件加载方法中得到了一个nil字符串.然后我将我的测试文件重命名为相同的名称,它获得了原始测试数据.咦?在最坏的情况下,我认为我会看到某种奇怪的数据加载到我的字符串中......不是零.
这是代码片段的程式化部分.请忽略数据文件NSString周围的"捕获和释放"代码......我意识到我不需要这样做,这不是问题的关键.
datafilename设置为'config1.txt'.
(NSString*) OpenEntryFile: (NSString*) pathname withdatafilename: (NSString*) datafilename {
NSStringEncoding encoding;
NSError* error = nil;
NSString* inputdatafile;
NSString* response;
NSString *homeDir = NSHomeDirectory();
NSString *fullPath = [homeDir stringByAppendingPathComponent:datafilename];
filepointer = 0;
[Datafile release];
inputdatafile = [NSString stringWithContentsOfFile: fullPath usedEncoding:&encoding error:&error];
Datafile = [inputdatafile copy];
response = [NSMutableString stringWithString: @"OK"];
if (error) {response = [NSMutableString stringWithString: @"ERROR"];};
if ([Datafile length] < 60) {response = [NSMutableString stringWithString: @"SHORT"];};
return response;
}
Run Code Online (Sandbox Code Playgroud)