0

明確にする必要があります: 画像をロードするために、このクラス メソッドを作成しました。画像が存在しない場合、nil戻り値を処理する方法を返していますか、それとも初期化されていないものを返す方UIImageが明確ですか(まだnilですが、より明確です)?

+ (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 に答える