你好,歡迎來到IOS教程網

 Ios教程網 >> IOS訊息 >> 關於IOS >> iOS開發之數據存取3

iOS開發之數據存取3

編輯:關於IOS

當系統提供的類型不能達到我們的使用要求時,比如我想在CoreData中存儲UIColor,該怎麼辦呢?

  這時候就要用到CoreData中非常強大的一個存儲類型了:Transformable   下面將通過一個例子簡單介紹下如何存儲像UIColor這種數據   1、創建實體模型       2、根據模型生成數據模型,並且創建用於轉換Color的類,繼承自NSValueTransform       3、在.m文件中有4個必須實現的方法   復制代碼  1 //  2 //  ColorTransformer.m  3 //  CoreData自定義模型數據  4 //  5 //  Created by Liu Feng on 14-3-1.  6 //  Copyright (c) 2014年 Liu Feng. All rights reserved.  7 //  8   9 #import "ColorTransformer.h" 10  11 @implementation ColorTransformer 12  13 /**     允許轉換    */ 14 + (BOOL)allowsReverseTransformation 15 { 16     return YES; 17 } 18  19 /**     轉換成什麼類    */ 20 + (Class)transformedValueClass 21 { 22     return [NSData class]; 23 } 24  25 /**     返回轉換後的對象    */ 26 - (id)transformedValue:(id)value 27 { 28     // 將color轉成NSData 29     UIColor *color = (UIColor *)value; 30      31     CGFloat red, green, blue, alpha; 32     [color getRed:&red green:&green blue:&blue alpha:&alpha]; 33      34     CGFloat components[4] = {red, green, blue, alpha}; 35      36     NSData *dataFromColor = [[NSData alloc] initWithBytes:components length:sizeof(components)]; 37      38     return dataFromColor; 39 } 40  41 /**     重新生成原對象    */ 42 - (id)reverseTransformedValue:(id)value 43 { 44     NSData *data = (NSData *)value; 45      46     CGFloat components[4] = {0.0f, 0.0f, 0.0f, 0.0f}; 47      48     [data getBytes:components length:sizeof(components)]; 49      50     UIColor *color = [UIColor colorWithRed:components[0] green:components[1] blue:components[2] alpha:components[3]]; 51      52     return color; 53 } 復制代碼 4、完成了以上步驟,我們就可以順序的將UIColor對象存到數據庫中,並且從中取出,下面是測試用代碼   創建數據庫管理類       4.0 實現.m文件,代碼如下   復制代碼  1 #import "CoreDataManager.h"  2 #import "Flower.h"  3 #import <CoreData/CoreData.h>  4   5 @implementation CoreDataManager  6   7 - (id)init  8 {  9     if (self = [super init]) { 10         // 創建數據庫 11         [self openDB]; 12     } 13     return self; 14 } 15  16 - (void)openDB 17 { 18     // 1. 合並模型 19     NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil]; 20      21     // 2. 永久存儲 22     NSPersistentStoreCoordinator *store = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model]; 23      24     NSURL *fileURL = [NSURL fileURLWithPath:@"/Users/liufeng/Desktop/CoreData自定義模型數據/abc.db"]; 25      26     NSError *error = nil; 27     [store addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:fileURL options:nil error:&error]; 28      29     if (error) { 30         NSLog(@"數據庫創建失敗"); 31     }else { 32         NSLog(@"數據庫創建成功"); 33     } 34      35     if (!_ctx) { 36         _ctx = [[NSManagedObjectContext alloc] init]; 37     } 38      39     _ctx.persistentStoreCoordinator = store; 40 } 復制代碼 4.1 最後是ViewController.m文件中的測試代碼   復制代碼  1 #import "ViewController.h"  2 #import "Flower.h"  3 #import "CoreDataManager.h"  4   5 @interface ViewController ()  6   7 @end  8   9 @implementation ViewController 10  11 - (void)viewDidLoad 12 { 13     [super viewDidLoad]; 14      15     CoreDataManager *manager = [[CoreDataManager alloc] init]; 16      17     Flower *flower = [NSEntityDescription insertNewObjectForEntityForName:NSStringFromClass([Flower class]) inManagedObjectContext:manager.ctx]; 18      19     flower.name = @"liufeng"; 20     flower.color = [UIColor grayColor]; // 如果出現警告,請將flower模型內的 color 類型 從id 改成 UIColor * 21      22     if ([manager.ctx save:nil]) { 23         NSLog(@"保存成功"); 24     } 25      26     NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:NSStringFromClass([Flower class])]; 27      28     NSError *error = nil; 29     NSArray *array = [manager.ctx executeFetchRequest:request error:&error]; 30      31     for (Flower *flower in array) { 32         NSLog(@"---%@-%@", flower.name, flower.color); 33     } 34 }
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved