0

だから、私が書いているアプリは、ユーザーがカメラロールから写真をアップロードできるようにし、UIImageView に表示します。「保存」ボタンがあり、押すと画像を保存できます。「編集」ボタンもあります。タップすると、ユーザーは写真をタップして削除できます。これは私が問題を抱えているところです。

3 つの画像を追加してテストを実行し、保存ボタンを押してから削除すると、完全に削除されます。アプリを完全に閉じて再起動すると、画像が表示されなくなります。しかし、3 つの画像を追加して保存ボタンを押し、アプリを閉じて再起動し、写真を削除しようとすると、まったく機能しません。画像は画面から消えますが、再起動すると再び読み込まれます。非常に奇妙な。私はObjective-Cにまったく慣れていません。ここまでできたことに驚いているので、配列から削除する方法を理解するのに問題があります。

私はNSLog(@"User Clicked Yes. Deleting index %d of %d", alertView.tag, [array count]);ym コードを持っています。アプリを閉じる前にそれを削除すると、配列カウントにオブジェクトが含まれていることが表示されます。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-クラスファイル

4

1 に答える 1

2

問題はあなたのviewDidLoad方法にあります。初期化self.arrayしましたが、画像を s にロードするときにUIImageView、それらを配列に追加するのを忘れているため、削除機能が機能していません。削除関数は、空の配列からオブジェクトを削除しようとしています。

ステートメント内にtoifを追加する必要があります (注:この特定のメソッドを機能させるには、 a に変更する必要があります)UIImageViewself.arrayself.arrayNSMutableArray

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

等々。

于 2012-04-23T17:51:15.537 に答える