Note that there are some explanatory texts on larger screens.

plurals
  1. POSaving Images In iOS
    primarykey
    data
    text
    <p>I have an app that behaves like a photo gallery. I'm implementing the ability for the user to delete the photos, by placing an invisible button over each UIImageView, and calling removeObject when they tap on the button. This code is working great, but its dependent upon tags. I need to tag every UIImageView / UIButton in interface builder in order for this to work. So, I'm now trying to save the images in a way that my tags will still work, which excludes using NSData.</p> <p>So I'm totally lost on what to do right now. I'm very, very new to programming and am shocked that I even made it this far. Any help or advice on what or how to edit my code to make this work is much appreciated, thanks!</p> <p>Here is my entire file just for reference:</p> <pre><code>- (IBAction)grabImage { self.imgPicker = [[UIImagePickerController alloc] init]; self.imgPicker.delegate = self; self.imgPicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) { _popover = [[UIPopoverController alloc] initWithContentViewController:imgPicker]; [_popover presentPopoverFromRect:self.imageView.bounds inView:self.imageView permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; } else { [self presentModalViewController:imgPicker animated:YES]; } [self.imgPicker resignFirstResponder]; } // Sets the image in the UIImageView - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)img editingInfo:(NSDictionary *)editInfo { if (imageView.image == nil) { imageView.image = img; [self.array addObject:imageView.image]; [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.image]; [picker dismissModalViewControllerAnimated:YES]; [self.popover dismissPopoverAnimated:YES]; return; } if (imageView3.image == nil) { imageView3.image = img; [self.array addObject:imageView3.image]; [picker dismissModalViewControllerAnimated:YES]; [self.popover dismissPopoverAnimated:YES]; return; } if (imageView4.image == nil) { imageView4.image = img; [self.array addObject:imageView4.image]; [picker dismissModalViewControllerAnimated:YES]; [self.popover dismissPopoverAnimated:YES]; return; } if (imageView5.image == nil) { imageView5.image = img; [self.array addObject:imageView5.image]; [picker dismissModalViewControllerAnimated:YES]; [self.popover dismissPopoverAnimated:YES]; return; } - (void)applicationDidEnterBackground:(UIApplication*)application { NSLog(@"Image on didenterbackground: %@", imageView); [self.array addObject:imageView.image]; [self.array addObject:imageView2.image]; [self.array addObject:imageView3.image]; [self.array addObject:imageView4.image]; [self.array addObject:imageView5.image]; [self.user setObject:self.array forKey:@"images"]; [user synchronize]; } - (void)viewDidLoad { self.user = [NSUserDefaults standardUserDefaults]; NSLog(@"It is %@", self.user); self.array = [[self.user objectForKey:@"images"]mutableCopy]; imageView.image = [[self.array objectAtIndex:0] copy]; imageView2.image = [[self.array objectAtIndex:1] copy]; imageView3.image = [[self.array objectAtIndex:2] copy]; imageView4.image = [[self.array objectAtIndex:3] copy]; imageView5.image = [[self.array objectAtIndex:4] copy]; UIApplication *app = [UIApplication sharedApplication]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidEnterBackground:) name:UIApplicationDidEnterBackgroundNotification object:app]; [super viewDidLoad]; } // This is when the user taps on the image to delete it. - (IBAction)deleteButtonPressed:(id)sender { NSLog(@"Sender is %@", sender); UIAlertView *deleteAlertView = [[UIAlertView alloc] initWithTitle:@"Delete" message:@"Are you sure you want to delete this photo?" delegate:self cancelButtonTitle:@"No" otherButtonTitles:@"Yes", nil]; [deleteAlertView show]; int imageIndex = ((UIButton *)sender).tag; deleteAlertView.tag = imageIndex; } - (UIImageView *)viewForTag:(NSInteger)tag { UIImageView *found = nil; for (UIImageView *view in self.array) { if (tag == view.tag) { found = view; break; } } return found; } - (void)alertView: (UIAlertView *) alertView clickedButtonAtIndex: (NSInteger) buttonIndex { if (buttonIndex != [alertView cancelButtonIndex]) { NSLog(@"User Clicked Yes. Deleting index %d of %d", alertView.tag, [array count]); NSLog(@"The tag is %i", alertView.tag); UIImageView *view = [self viewForTag:alertView.tag]; if (view) { [self.array removeObject:view]; } NSLog(@"After deleting item, array count = %d", [array count]); NSLog(@"Returned view is :%@, in view: %@", [self.view viewWithTag:alertView.tag], self.view); ((UIImageView *)[self.view viewWithTag:alertView.tag]).image =nil; } [self.user setObject:self.array forKey:@"images"]; } @end </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload