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;
}
4

2 回答 2

2

返回 nil,这是表示操作无法完成的正确方式……那么下面的代码就起作用了:

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;
}
于 2013-03-08T15:54:31.427 回答
2

这很正常。许多 Foundation 和 UIKit 方法都是这样做的。只需记录该方法在出错时返回nil. NSData dataWithContentsofFile:例如

作为建议,为了防止可能出现目录,您可以使用此方法(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
于 2013-03-08T15:56:16.540 回答