0

私のアプリでは、ユーザーは画像をドキュメントディレクトリに保存できます。起動時に、画像を取得して境界線を追加し、次のようにUIImageviewに配置します。

NSArray *sysPaths = NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES );
        NSString *docDirectory = [sysPaths objectAtIndex:0];
        NSString *filePath = [NSString stringWithFormat:@"%@/ImageOne.jpg", docDirectory];
        UIImage *unborderedImage  = [[[UIImage alloc] initWithContentsOfFile:filePath] autorelease];

        //image found....add border
        UIImage *imageWithBorder = [self addBorderToImage:unborderedImage];
        imageOneView.image = imageWithBorder;

理想的には、境界線を追加する前に、まず画像がそこにあることを確認したいと思います。そうでない場合は、「画像が利用できません」プレースホルダーを読み込みます。このようなもの:

NSArray *sysPaths = NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES );
        NSString *docDirectory = [sysPaths objectAtIndex:0];
        NSString *filePath = [NSString stringWithFormat:@"%@/ImageOne.jpg", docDirectory];
        UIImage *unborderedImage  = [[[UIImage alloc] initWithContentsOfFile:filePath] autorelease];

NSError * error;

    if (error != nil) {
        //image found....add border
        UIImage *imageWithBorder = [self addBorderToImage:unborderedImage];
        imageOneView.image = imageWithBorder;
    } else
        //no image saved
        [imageOneView setImage:[UIImage imageNamed:@"photoNotAvailable.png"]];
    }

もちろん、これは機能しません。「ImageOne.jpg」が見つからない場合の処理​​方法がわからないようです。

4

2 に答える 2

0

結局のところ、アプリ内の別の場所で画像を使用して別のことを行う必要があります。これは、ユーザーが画像を保存したかどうかにも依存します。したがって、ユーザーが画像を保存できる私の方法では、画像が変更されたことを示す NSNotification を送信します。次に、MainView で通知を探し、それをキーオフします。

保存時:

[collectionOneUserDefinedDefaults setObject:@"image added" forKey:@"collectionOneImageAdded"];
[[NSNotificationCenter defaultCenter] postNotificationName:@"collectionOneImageChanged" object:self];

次に、MainView で通知を探します。

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateCollectionOneImage) name:@"collectionOneImageChanged" object:nil];

- (void)updateCollectionOneImage {

    //check if an image was ever saved, if so, replace the noPhotoAvailalble placeholder
    NSUserDefaults *collectionOneUserDefinedDefaults = [NSUserDefaults standardUserDefaults];
    NSString *collectionOneImageTextString = [collectionOneUserDefinedDefaults stringForKey:@"collectionOneImageAdded"];

    if (collectionOneImageTextString == nil || [collectionOneImageTextString isEqualToString:@""]) {
        [collectionOneImage setImage:[UIImage imageNamed:@"photoNotAvailable.png"]];
    }
    else {
        //pull in collection one image from the Documents folder
        NSArray *sysPaths = NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES );
        NSString *docDirectory = [sysPaths objectAtIndex:0];
        NSString *filePath = [NSString stringWithFormat:@"%@/CollectionOneImage.jpg", docDirectory];
        UIImage *unborderedImage  = [[[UIImage alloc] initWithContentsOfFile:filePath] autorelease];
        //image found....add border
        UIImage *imageWithBorder = [self addBorderToImage:unborderedImage];
        collectionOneImage.image = imageWithBorder;
    }
}

それは完全に機能します。次に、エラー処理が組み込まれます。ユーザーが画像を保存した場合は、読み込まれます。そうでない場合は、プレースホルダー イメージが読み込まれます。

于 2012-09-27T14:02:20.523 に答える
-1

ここでのエラー処理は何もしておらず、誤った方向に進んでいます。必要なのは、unborderedImageがゼロかどうかを確認することだけです。

于 2012-09-27T12:45:01.633 に答える