2013-03-08 114 views
0

需要澄清:我写了这个类的方法来加载图像。如果图像不存在,返回nil处理返回值的方式,还是会更清楚地返回未初始化的UIImage(仍然为零但更清晰)?正确:返回零的有效数据?

+ (UIImage*)loadImageByName:(NSString*)name 
{ 
    NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
    NSString *imagePath = [documentsPath stringByAppendingPathComponent:name]; 
    BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:imagePath]; 

    if (fileExists){ 
     UIImage* tmpImage = [UIImage imageWithContentsOfFile:imagePath]; 
     return tmpImage; 
    } 
    return nil; 
} 
+3

返回'nil'是一个很好的方式来表明,没有图像可以加载。 – rmaddy 2013-03-08 15:49:30

+1

无零是。当您将“赋值”给一个UIImage类型的变量并且然后返回无效变量时,没有任何收获。 # – 2013-03-08 16:18:56

回答

2

这很常见。 Foundation和UIKit的许多方法都是这样做的。只需记录,如果错误,该方法返回nilNSData dataWithContentsofFile: for example

,作为建议,防范了可能的目录,你可以用这个方法(ref):

- (BOOL)fileExistsAtPath:(NSString *)path isDirectory:(BOOL *)isDirectory; 

例:

BOOL isdir; 

if ([[NSFileManager defaultManager] fileExistsAtPath:imagePath isDirectory:&isdir] && (! isdir)) 
    // file exists and not a directory 
else 
    // handle error like mentioned in another answer 
+0

酷 - 谢谢。 – 2013-03-08 16:08:30

2

回报为零,即表明该操作不能完成正确的方式... 然后将下面的代码工作:

UIImage * someImage; 
if ((someImage = [YourClass loadImageByName:@"donkey"])) 
{ 
//do something 
}else{ 
//failure 
} 

此外,如果你想你可以包括某种反馈

+ (UIImage*)loadImageByName:(NSString*)name error:(NSError **)err 
{ 
    NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
    NSString *imagePath = [documentsPath stringByAppendingPathComponent:name]; 
    BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:imagePath]; 

    if (fileExists){ 
     UIImage* tmpImage = [UIImage imageWithContentsOfFile:imagePath]; 
     return tmpImage; 
    }else{ 
     if(err) 
     { 
      *err = [NSError someErrorMethodHere...]; 
     } 
    } 
    return nil; 
}