2012-03-28 8 views
1

私が取り組んでいるアプリケーションでは、カメラロールから画像を選んでUIImageViewに表示することができます。今、私はデータを保存しようとするいくつかの問題があります。私はイメージをPNGに変換してデータを保存する必要があることを知っていますが、それを行うにはいくつか問題があります。私はファイルセーブとObjective-Cのために非常に新しいです。 。iOS:イメージをPNGに変換して保存できるようにする

- (NSString *)dataFilePath { 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(
                 NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    return [documentsDirectory stringByAppendingPathComponent:kFilename9]; 
} 

- (void)applicationDidEnterBackground:(NSNotification *)notification { 
    NSMutableArray *array = [[NSMutableArray alloc] init]; 

    NSData *imageData = [NSData dataWithData:UIImagePNGRepresentation(image.image)]; 
    [array addObject:imageData]; 

    [array writeToFile:[self dataFilePath] atomically:YES]; 
} 
- (void)viewDidLoad 
{ 
    self.imgPicker = [[UIImagePickerController alloc] init]; 
    self.imgPicker.allowsImageEditing = YES; 
    self.imgPicker.delegate = self; 
    self.imgPicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 


    NSString *filePath = [self dataFilePath]; 
    if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) { 
     NSArray *array = [[NSArray alloc] initWithContentsOfFile:filePath]; 
     image.image = [array objectAtIndex:0]; 
    } 

    UIApplication *app = [UIApplication sharedApplication]; 
    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(applicationDidEnterBackground:) 
               name:UIApplicationDidEnterBackgroundNotification 
               object:app]; 

    [super viewDidLoad]; 

} 

プログラムは、単にこれはで行われることのタブをタップするとクラッシュしたデバッガの状態 "『NSInvalidArgumentExceptionを』、理由:ここで私が使用しているコードは「 - [__ NSCFData _isResizable]:認識されていないセレクタインスタンス0x16cf50 ''に送信されました。どんな助けでも大歓迎です、ありがとう! yourUIImageを提供

答えて

1

まず、最初に、これらの操作を実行する「タブ」に入る2番目のエラーが発生していますか?したがって、エラーはviewDidLoadメソッド内にあるはずです。次に、セレクタエラーが発生するため、@ selectorを使用した場所を探します。ここで

は、エラーの原因となっている問題である:メソッドapplicationDidEnterBackgroundは、パラメータ(NSNotification *)があることを

[[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(applicationDidEnterBackground:) 
              name:UIApplicationDidEnterBackgroundNotification 
              object:app]; 

お知らせ:

- (void)applicationDidEnterBackground:(NSNotification *)notification { 

、まだあなたがアプリにそれを送信しているが、これUIApplicationです:

UIApplication *app = [UIApplication sharedApplication] 

これは私が見ることができる唯一のものですuldはあなたにこのエラーを与えます。ただ、これに変更し、エラーが離れて行く必要があります。

- (void)applicationDidEnterBackground:(UIApplication*)application { 

は、EDITをBEGIN:

限り画像を保存するように、私はあなたがデータを格納している正確にどのように知りません、しかし、ここで私はそれをやるでしょう。

  1. 画像のデータを保存するには、保持されたプロパティを使用します。

ViewController.h

@interface ViewController 

//Add this line 
@property(retain) NSData* imageData; 

@end 

ViewController.m

//Remember to include this line somewhere in this file: 
@synthesize imageData; 

あなたは、ファイルを保存しようとしているとき:

- (void)applicationDidEnterBackground:(UIApplication*)application { 
self.imageData = [NSData dataWithData:UIImagePNGRepresentation(image.image)]; 

[self.imageData writeToFile:[self dataFilePath] atomically:YES]; 

}

この方法では、データを失うことはなく、配列を使用する必要はありません。ただ、viewDidUnloadメソッドでも、この行を追加してください:

self.imageData = nil; 

END EDITのに役立ちます

希望。

+0

素晴らしいです、ありがとうございます! – John

+1

問題ありません。喜んで – David

+0

画像は保存されませんが、コードを編集して保存する方法を知っていますか?もう一度ありがとう! – John

0

が有効であるとのデータが含まれている、あなただけの配列を作成し、それへの書き込みをする必要はありませ

[imageData writeToFile:(NSString*) atomically(BOOL)] 

を呼び出すことはできません。

関連する問題