我想將照片保存至核心數據。我在互聯網上查找並找到許多關於核心數據的資源,但是我找不到我想要完成的一個。我想使用核心數據來保存用戶已經拍攝的圖像,然後希望用戶選擇他想要保存的圖像。就像他正在將圖片分類爲肉類或蔬菜等類別。爲此,我製作了一個名爲「照片」的實體,並放置了6個屬性名稱,例如肉類蔬菜。我還沒有選擇類型。我想用戶選擇類別並保存一個屬性。這是問題。我想這樣做,但我找不到符合我想要的資源。我也在做正確的想法使用多個屬性?將照片保存至核心數據
0
A
回答
0
不,這不是一個好方法。目前,您每個entity
都有six attributes
。這將導致爲您的數據庫中的每一行創建無用的5個屬性。
取而代之的是,你可以爲你的Category
的enum
和enum
值存儲在您的coreData
。
所以,你可以添加任何數量的類別中的enum
爲未來的增強也,你不必在乎你存儲在coreData
。
就像這樣。
typedef enum imageType {
vegetables = 0,
fruits = 1,
animals = 2,
scenaries = 3,
Nature = 4,
Home = 5,
Architecture = 6
}
和你的coreData
實體是這樣的。
ImageEntity
NSData *imageData;
NSNumber *typeEnum;
你可以有你的類的名稱的數組,並用它在你的應用程序到enum
與類別的確切名稱匹配您UIPickerView
或以其他組件。
你的數組可能是這樣的。
NSArray *categoryArray = [NSArray arrayWithObjects:@"vegetables", @"fruits", @"animals", @"scenaries", @"Nature", @"Home", @"Architecture", nil];
而且你可以像這樣訪問數組對象。
NSString *imageCategory = [categoryArray objectAtIndex:imageType.animals];
1
向下滾動用於存儲核心數據UIImage的數據,但首先一點有關核心數據屬性:你不應該使用針對不同類別的多種屬性,你應該有所謂的「類別」的單一屬性。這可能是一個整數或字符串,具體取決於您的實現。我建議使用一個整數,定義枚舉它如下:
typedef NS_ENUM(NSUInteger, MyFoodCategory){
MyFoodCategoryVegetable = 0,
MyFoodCategoryMeat = 1,
MyFoodCategoryFish = 2,
MyFoodCategorySweet = 3,
};
當你打印出來的觀點,這樣做如下:
-(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;
}
}
這意味着,如果你改變記住你想要爲每個類別打印什麼樣的測試,那麼你只需要在這個地方進行更改,而不必更改核心數據庫中的內容。例如,您可以使用本地化來顯示同一單詞的不同語言或變體。
核心數據
OK保存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];
相關問題
- 1. 在覈心數據中保存照片
- 2. 保存一張照片並使用核心數據顯示它
- 3. 將核心位置數據保存到核心數據?
- 4. 將核心數據保存到核心數據
- 5. 將核心數據保存到核心數據
- 6. 將數組保存到核心數據
- 7. 保存NSNumber核心數據
- 8. 核心數據保存
- 9. 保存核心數據?
- 10. 保存在覈心數據
- 11. 核心數據:未保存
- 12. 將視頻保存到核心數據
- 13. 將UIImage保存爲核心數據
- 14. 將MKOverlay保存到核心數據
- 15. 將圖像保存到核心數據?
- 16. 將圖像保存爲核心數據
- 17. 未保存核心數據數據
- 18. 核心數據數據庫不保存
- 19. 核心數據不會保存數據
- 20. Android:將照片保存到照片庫
- 21. plists vs核心數據保存參數
- 22. 將div保存爲照片?
- 23. 將照片保存到UIImageView
- 24. 將數據從uitableview保存到核心數據
- 25. 將數據的訂購清單保存到核心數據中
- 26. 將數據保存在覈心數據(IOS)中時出錯
- 27. 核心數據保存進度
- 28. Swift 3多核心數據保存
- 29. 核心數據保存和提取
- 30. 保存時核心數據問題
這也是不錯的使用自定義的'NSValueTransformer'像圖像非標準屬性。 Apple甚至在他們的PhotoLocations **示例應用程序中提供了這個示例實現。 –
我想讓用戶使用'UIPickerView'來選擇要保存的類別,但我無法使其工作。對我來說,做什麼是一個好的起點? – AppleDevram