将图像添加到 NSUserDefaults 和文件夹

Posted

技术标签:

【中文标题】将图像添加到 NSUserDefaults 和文件夹【英文标题】:adding images to NSUserDefaluts and folder 【发布时间】:2014-09-23 12:05:41 【问题描述】:

我有一个数据库结构:UserDefaults->Empdata Dictionary->Iphone Array-> 添加的每个员工的字典。 连同其他详细信息,我想保存员工的图像。 Employee 使用 ImagePicker 上传其图像。我也想当所有细节都保存后也可以编辑。我曾想过将所有图像保存在一个文件夹中,并将其图像名称作为员工姓名,然后通过图像名称检索此图像。如果有是其他一些替代品,请告诉我。任何形式的帮助都将是可观的。 提前致谢。

【问题讨论】:

另一种称为 CoreData。 NSUserDefaults 不是数据库,它用于应用设置。 尝试将NSUserDefaults 仅用于小数据值。对于图像,尝试将图像存储在文档目录中。将核心数据用于基于数据库的应用程序是最佳做法。 我是 ios 新手,我不知道该怎么做。我在用户默认值中保存了其他详细信息。如果使用文档目录可以解决我的问题,请建议在我的项目中实现它。 【参考方案1】:

正如大家已经建议的那样,您应该使用应用程序目录来保存和检索图像。

还可以使用员工 ID 等独特的名称来代替员工姓名。

下面的帖子解释了在应用目录中保存和检索的过程。请遵循以下操作:

Saving image to Documents directory and retrieving for email attachment

【讨论】:

【参考方案2】:

NSUserDefaults 不打算存储二进制数据或大块数据! 如果图像小于 100KB,您应该将图像保存到磁盘或使用 Core Data 将其存储到磁盘或数据库中。

编辑:

要将图像从 ImagePickerController 保存到磁盘,您可以执行以下操作:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info

    UIImage *image = [info objectForKey:UIImagePickerControllerEditedImage];

        NSString *imageFilename = [NSString stringWithFormat:@"%@.jpg", yourNameString];
        NSString *paths = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];

      NSString*  imagePath = [NSString stringWithFormat:@"%@/%@", paths, imageFilename];

    NSLog(@"IMAGE PATH: %@", imagePath);

    [self dismissViewControllerAnimated:YES completion:^

    NSData *imageData = UIImageJPEGRepresentation(image, 1.0f);
    if([imageData writeToFile:imagePath atomically:YES])
    
        NSLog(@"Write to Document folder success filename = %@",imagePath);
    

];


对于 Core Data,您应该搜索一些教程或书籍,因为它需要学习的内容很多,并且超出了本主题的范围。

【讨论】:

我是 ios 新手,我不知道该怎么做。我在用户默认值中保存了其他详细信息。如果使用文档目录可以解决我的问题,请建议如何在我的项目中实现它。 —— 这会解决我的目的还是我还需要添加其他东西?? 它将解决您的要求。那就是用员工的名字将图像保存到磁盘(参见“yourNameString”)。您还拥有图像的路径,您可以将其添加到包含员工信息的 NSDictionary 中,然后从中检索。

以上是关于将图像添加到 NSUserDefaults 和文件夹的主要内容,如果未能解决你的问题,请参考以下文章

Swift 将图像(截图)保存到 nsuserdefaults

如何快速将 NSIndexPath 添加到 NSUserDefaults

如何使用 NSUserDefaults 将项目添加到 NSMutableArray

Swift:将 NSDictionary 保存到文件中,因为 NSUserDefaults 会变慢

将字符串保存到 NSUserDefaults?

禁用添加对象的选项,该对象已经在从 NSUserDefaults 加载的数组中