2012-04-23 36 views
0

私が書いているアプリでは、カメラロールから写真をアップロードでき、UIImageViewに表示されます。私は、 "保存"ボタンを押すと画像を保存することができます。タップすると「編集」ボタンもあり、写真をタップすると削除され、削除されます。これは私が問題を抱えているところです。再起動時にアプリケーションが正しく動作しない

3つのイメージを追加してテストを実行すると、保存ボタンを押してから削除しても完全に削除されます。私はアプリを完全に閉じて再起動することができ、画像はもはや存在しません。しかし、3つの画像を追加する場合は、保存ボタンを押してアプリを閉じて再起動し、写真を削除しようとすると、全く機能しません。画像は画面から消えますが、再起動時に再度読み込まれます。非常に奇妙な。私はObjective-Cを全く新しくしています。私はこれまでこれを作ったことにも驚いています。だから、配列から削除する方法の問題を抱えています。

ymコードにNSLog(@"User Clicked Yes. Deleting index %d of %d", alertView.tag, [array count]);があります。アプリを閉じる前に削除すると、配列数にオブジェクトが含まれていることが表示されます。 Xcodeからもう一度実行して、すでに保存されている画像を削除しようとすると、配列数= 0であることを示します。オブジェクトは再配置時に配列にありません。したがって、問題は、配列内のオブジェクトが正しく保存されていないことです。なぜ私は考えていない、私はそれらを正しく保存していたと思った。私は、これは配列に配置したオブジェクトを保存だろうと思ったが、どうやらない

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)img editingInfo:(NSDictionary *)editInfo { 
    if (imageView.image == nil) { 
     imageView.image = img; 

     [self.array addObject:imageView]; 

     [picker dismissModalViewControllerAnimated:YES]; 
     [self.popover dismissPopoverAnimated:YES]; 

     return; 

    } 

    if (imageView2.image == nil) { 
     imageView2.image = img; 
     NSLog(@"The image is a %@", imageView); 
     [self.array addObject:imageView2]; 

     [picker dismissModalViewControllerAnimated:YES]; 
     [self.popover dismissPopoverAnimated:YES]; 

     return; 
    } 
    ... 
    ... 
-(IBAction)saveButtonPressed:(id)sender { 
    NSString *docsDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES) objectAtIndex:0]; 

    NSLog(@"Image view array before saving = %@", self.array); 

    for (UIImageView *imageViewToSave in self.array) { 

     NSInteger tag = imageViewToSave.tag; 
     UIImage *image = imageViewToSave.image; 
     NSString *imageName = [NSString stringWithFormat:@"Image%i.png",tag]; 

     NSString *imagePath = [docsDir stringByAppendingPathComponent:imageName]; 

     NSLog(@"Saving %@ to %@", image, imagePath); 

     [UIImagePNGRepresentation(image) writeToFile:imagePath atomically:NO]; 
    } 
    NSLog(@"Save Button Pressed"); 
} 

:これは私が配列にそれらを追加する方法です。私はこれをやることについて他にどのように行くべきか分かりません。

参考のために、私は.hと.mファイルをwikiに投げました。ここに私の.hファイル全体があります: github.com/Joey502/Test-Thing/wiki/.h-Class-Fileそしてここに私の.mファイル全体があります:github.com/Joey502/Test-Thing/wiki/.m -class-ファイル

+0

画像配列を初期化していて、その配列にオブジェクトが含まれていることを再起動した後にデバッグしていますか? – rishi

+0

@RIP私は、配列にrelaunchのオブジェクトが含まれていることを確認していません。コード全体でNSLogsに追加し、オブジェクトを閉じる前に配列にオブジェクトが含まれていることを確認しました。しかし、私は完全に私はこの種の困難なXcodeのデバッグウィンドウをもう使用することはできませんアプリケーションを閉じた後。私が上に投稿した.mファイルでは、imagePickerControllerメソッドの配列にオブジェクトを追加しているようです。それはこの問題を引き起こす可能性がありますか? – John

+1

はgithub上の.mファイルを開くことができません。また、Xcode自体からオフアプリケーションを一度切り替えてみると、これらの問題点が正確に分かるようになります。 – rishi

答えて

2

問題は、あなたがself.arrayを初期化しているが、あなたのUIImageView Sに画像をロードするときに、削除機能が働いていない理由である配列、に追加し忘れていたが、あなたのviewDidLoad方法であります。あなたの削除機能は空の配列からオブジェクトを削除しようとしています。あなたのif文インサイド

あなたはUIImageViewself.arrayに追加する必要があります(注:あなたは、この特定のメソッドが動作するためにNSMutableArrayself.arrayを変更する必要があります)ように

if (!imageView.image) { 
    imageView.image = loadedImage; 
    [self.array addObject:imageView]; 
} 
else if (!imageView2.image) { 
    imageView2.image = loadedImage; 
    [self.array addObject:imageView2]; 
} 

とを。

+0

ああうわー、それは意味をなさない。私は 'UIImageViews'と配列であまり働かなかったので、' viewDidLoad'の配列にどのように追加するべきか知っていますか? 'self.array = [[NSMutableArray arrayWithObjects:[UIImage imageNamed:@" Image1.png "]、[UIImage imageNamed:@" Image2.png "]、etc ...'これでしょうか?正しい? – John

+0

例を示すために答えを編集しました。 – sooper

+0

大変ありがとうございます!だから確認するために、私は '[self.array addObject:loadedImage];'を追加するだけです。そして、私はIBでタグを設定しているので、 'UIImage'sはすでにタグ付けされた' UIImageView'にジャンプするので自動的にタグ付けされるべきですか?初心者の質問にもう一度申し訳ありません。 – John

関連する問題