ios - 将照片保存到核心数据

标签 ios core-data save photo

我想将照片保存到 Core Data。我在互联网上查找并找到许多有关核心数据的资源,但我找不到我想要完成的资源。我想使用核心数据来保存用户拍摄的图像,然后希望用户选择他想要保存的类别。就好像他正在将图片分类为类别,例如肉类或蔬菜等。为此,我创建了一个名为照片的实体,并放置了类别的 6 个属性名称,例如肉类蔬菜。我还没有选择类型。我认为用户选择类别并将其保存为属性。这是问题所在。我想这样做,但找不到满足我想做的事情的资源。我是否正确思考使用多个属性?

最佳答案

向下滚动以将 UIImage 数据存储在核心数据中,但首先了解一下核心数据属性:您不应该对不同的类别使用多个属性,您应该有一个名为“类别”的属性。这可以是整数或字符串,具体取决于您的实现。我建议使用整数并为其定义一个枚举,如下所示:

typedef NS_ENUM(NSUInteger, MyFoodCategory){
    MyFoodCategoryVegetable = 0,
    MyFoodCategoryMeat = 1,
    MyFoodCategoryFish = 2,
    MyFoodCategorySweet = 3,
};

当您将其打印到 View 时,请执行以下操作:

-(void)setLabelTextForCategory:(MyFoodCategory)category
{
    switch(category) {
        case MyFoodCategoryVegetable:
            self.categoryLabel.text = @"Vegetable";
            break;
        case MyFoodCategoryMeat:
            self.categoryLabel.text = @"Meat";
            break;
        case MyFoodCategoryFish:
            self.categoryLabel.text = @"Poisson"; //French
            break;
        case MyFoodCategorySweet:
            self.categoryLabel.text = @"Dessert";
            break;
    }
}

这意味着,如果您改变主意希望为每个类别打印什么测试,那么您只需在此处进行更改,而不必更改核心数据库中的内容。例如,您可以使用本地化来显示不同的语言或同一单词的变体。

在核心数据中存储UIImage数据

好的,现在回答您的主要问题。我个人会避免将图像数据存储在核心数据中,而是将其保存到磁盘中。考虑使用 NSFileManager 类或将 UIImage 转换为 NSData 并写入文件,例如

UIImage *image = ...
NSData *imageData = UIImagePNGRepresentation(image); // or use UIImageJPEGRepresentation if it's a jpeg image

NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *fileName = @"imageWhatever1";
NSString *filePath = [documentsPath stringByAppendingPathComponent:fileName];
NSError *writeError = nil;
if (![data writeToFile:filePath options:NSDataWritingAtomic error:&writeError]) {
    NSLog(@"Failed to write file: %@", writeError);
}

但是,如果您希望将图像直接保存到核心数据,则创建一个名为“imageData”的属性并将属性类型设置为“二进制数据”。然后将NSData对象保存到核心数据实体中。当您读取 NSData 对象时,可以将其转换回 UIImage,如下所示:

UIImage *imageLoadedFromDiskOrCoreData = [UIImage imageWithData:imageData];

关于ios - 将照片保存到核心数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18109035/

相关文章:

ios 应用程序使用 web 服务

objective-c - 是什么导致我的 iPad 应用程序出现此 EXC_CRASH?

ios - 具有两个一对多关系的 CoreData NSPredicate

java - JTextPane - 内容在哪里?

ios - HealthKit:保存 HKCategoryTypeIdentifierAppleStandHour 类型的样本

ios - UIImageview 上的渐变层在 iphone 6s plus 中向上移动,同时在 iphone 5 中正确设置

multithreading - 其他线程可以间接访问在其自己的线程中运行的托管对象上下文吗?

iphone - 以编程方式在 Objective-C 中创建属性?

android - 验证保存按钮

vba - 使用 VBA 在 Sharepoint 中创建新文件夹