保存UIImage并保存到枚举CoreData

时间:2013-08-09 16:58:26

标签: ios core-data enums uiimage

我创建了多个枚举,以便我可以保存用户在UIImage中显示的照片。但是我不知道如何保存和图片显示在UIImage中。我还希望用户选择他想要保存的枚举,以便我可以将图片分类为流派。我只是想有一个起点,现在我被困住了。

-(void)setLabelTextForCategory:(MyFoodCategory)category
{
    switch(category) {
        case MyFoodCategoryVegetable:
            self.categoryLabel.text = @"V";
            break;
        case MyFoodCategoryMeat:
            self.categoryLabel.text = @"M";
            break;
        case MyFoodCategoryFish:
            self.categoryLabel.text = @"P"; 
            break;
        case MyFoodCategorySweet:
            self.categoryLabel.text = @"D";
            break;
    }
}

1 个答案:

答案 0 :(得分:0)

因此,假设您的核心数据模型中有一个Image实体。在您的情况下,此实体将具有至少两个属性:imageData和genre。 imageData的类型为NSData,genre的类型为Integer64,当您生成类时,它们将成为一个属性,它将是一个NSNumber。因此,让您的用户选择图像和流派。然后你可以像这样保存:

    Image *theSavedImage = [NSEntityDescription insertNewObjectForEntityForName:@"Image" 
                                                         inManagedObjectContext:myContext];
    theSavedImage.imageData = UIImageJpegRepresentation(mySelectedImage, 1.0);
    theSavedImage.genre = [NSNumber numberWithInt:mySelectedGenre];
    NSError *error = nil;
    [myContext save:&error];

另外,如果你环顾谷歌,你会发现关于将图像直接存储到核心数据是否明智存在争议。当然可以做到。但有些人建议将文件URL作为属性存储在托管对象上,并将图像数据写入文件系统。

编辑以回应评论:

imageData 属性应该是二进制,而不是类型。该类型应该是Integer64。在生成的标头中,这些标题分别是NSData和NSNumber类型的属性。 NSNumber属性(类型)是您将所选枚举值保存到的内容,使用[NSNumber numberWithInt:mySelectedGenre];选择一个类型必须是一个单独的步骤,因为UIImagePickerController旨在按原样使用并且不提供用户除了基本上选择图像之外,还有机会做任何事情。