objective-c - 从 iOS 上的 UIView 将图像保存到应用程序文档文件夹

我有一个 UIImageView,它允许用户放置和保存图像,直到可以保存为止。问题是,我不知道如何实际保存和检索我放置在 View 中的图像。

我已经像这样检索图像并将其放置在 UIImageView 中:

//Get Image 
- (void) getPicture:(id)sender {
    UIImagePickerController *picker = [[UIImagePickerController alloc] init];
    picker.delegate = self;
    picker.allowsEditing = YES;
    picker.sourceType = (sender == myPic) ? UIImagePickerControllerSourceTypeCamera : UIImagePickerControllerSourceTypeSavedPhotosAlbum;
    [self presentModalViewController:picker animated:YES];
    [picker release];
}


- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage (UIImage *)image editingInfo:(NSDictionary *)editingInfo {
    myPic.image = image;
    [picker dismissModalViewControllerAnimated:YES];
}

它在我的 UIImageView 中显示选定的图像就好了,但我不知道如何保存它。我将 View 的所有其他部分(主要是 UITextfield)保存在 Core Data 中。我已经搜索和搜索,并尝试了人们建议的许多代码,但要么我没有正确输入代码,要么这些建议不适用于我设置代码的方式。很可能是前者。我想使用我用来将文本保存在 UITextFields 中的相同操作(保存按钮)将图像保存在 UIImageView 中。以下是我保存 UITextField 信息的方式:

// Handle Save Button
- (void)save {

    // Get Info From UI
    [self.referringObject setValue:self.myInfo.text forKey:@"myInfo"];

就像我之前说的,我已经尝试了几种方法来让它工作,但无法掌握它。我有生以来第一次想对一个无生命的物体造成 body 伤害,但我设法克制了自己。

我希望能够将用户放置到 UIImageView 中的图像保存在应用程序的文档文件夹中,然后能够检索它并将其放置在另一个 UIImageView 中,以便在用户将该 View 推送到堆栈时显示.非常感谢任何帮助!

最佳答案

一切都很好,伙计。不要伤害自己或他人。

您可能不想将这些图像存储在 Core Data 中,因为如果数据集变得太大,这会影响性能。最好将图像写入文件。

NSData *pngData = UIImagePNGRepresentation(image);

这会提取您捕获的图像的 PNG 数据。从这里,您可以将其写入文件:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  
NSString *documentsPath = [paths objectAtIndex:0]; //Get the docs directory 
NSString *filePath = [documentsPath stringByAppendingPathComponent:@"image.png"]; //Add the file name
[pngData writeToFile:filePath atomically:YES]; //Write the file

稍后阅读它的工作方式相同。像我们上面那样构建路径,然后:

NSData *pngData = [NSData dataWithContentsOfFile:filePath];
UIImage *image = [UIImage imageWithData:pngData];

您可能想要做的是创建一个为您创建路径字符串的方法,因为您不希望代码到处乱扔。它可能看起来像这样:

- (NSString *)documentsPathForFileName:(NSString *)name
{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);  
    NSString *documentsPath = [paths objectAtIndex:0];

    return [documentsPath stringByAppendingPathComponent:name]; 
}

希望对您有所帮助。

https://stackoverflow.com/questions/6821517/

相关文章:

ios - Xcode 9 中的 "This function declaration is not

ios - Xcode MyProjectName-Bridging-Header.h 不存在

ios - Objective-C/Cocoa 中 Java 的 Thread.sleep() 等价

iphone - 以编程方式请求访问联系人

iphone - Apple 怎么知道你在使用私有(private) API?

iphone - Objective C中变量位置的声明/定义?

objective-c - 如何在 Objective-C 中复制对象

objective-c - 何时使用 -retainCount?

ios - 从文档目录中删除指定文件

objective-c - 最佳实践 - 您自己的项目/应用程序的 NSError 域和代码