iOS开发之数据存取3-CoreData自定义数据类型
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了iOS开发之数据存取3-CoreData自定义数据类型,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3505字,纯文字阅读大概需要6分钟。
内容图文
当系统提供的类型不能达到我们的使用要求时,比如我想在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{ 16return YES; 17} 1819/** 转换成什么类 */20 + (Class)transformedValueClass 21{ 22return [NSData class]; 23} 2425/** 返回转换后的对象 */26 - (id)transformedValue:(id)value 27{ 28// 将color转成NSData29 UIColor *color = (UIColor *)value; 3031 CGFloat red, green, blue, alpha; 32 [color getRed:&red green:&green blue:&blue alpha:&alpha]; 3334 CGFloat components[4] = {red, green, blue, alpha}; 3536 NSData *dataFromColor = [[NSData alloc] initWithBytes:components length:sizeof(components)]; 3738return dataFromColor; 39} 4041/** 重新生成原对象 */42 - (id)reverseTransformedValue:(id)value 43{ 44 NSData *data = (NSData *)value; 4546 CGFloat components[4] = {0.0f, 0.0f, 0.0f, 0.0f}; 4748 [data getBytes:components length:sizeof(components)]; 4950 UIColor *color = [UIColor colorWithRed:components[0] green:components[1] blue:components[2] alpha:components[3]]; 5152return 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{ 9if (self = [super init]) { 10// 创建数据库11 [self openDB]; 12 } 13return self; 14} 1516 - (void)openDB 17{ 18// 1. 合并模型19 NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil]; 2021// 2. 永久存储22 NSPersistentStoreCoordinator *store = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model]; 2324 NSURL *fileURL = [NSURL fileURLWithPath:@"/Users/liufeng/Desktop/CoreData自定义模型数据/abc.db"]; 2526 NSError *error = nil; 27 [store addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:fileURL options:nil error:&error]; 2829if (error) { 30 NSLog(@"数据库创建失败"); 31 }else { 32 NSLog(@"数据库创建成功"); 33 } 3435if (!_ctx) { 36 _ctx = [[NSManagedObjectContext alloc] init]; 37 } 3839 _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]; 1415 CoreDataManager *manager = [[CoreDataManager alloc] init]; 1617 Flower *flower = [NSEntityDescription insertNewObjectForEntityForName:NSStringFromClass([Flower class]) inManagedObjectContext:manager.ctx]; 1819 flower.name = @"liufeng"; 20 flower.color = [UIColor grayColor]; // 如果出现警告,请将flower模型内的 color 类型 从id 改成 UIColor * 2122if ([manager.ctx save:nil]) { 23 NSLog(@"保存成功"); 24 } 2526 NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:NSStringFromClass([Flower class])]; 2728 NSError *error = nil; 29 NSArray *array = [manager.ctx executeFetchRequest:request error:&error]; 3031for (Flower *flower in array) { 32 NSLog(@"---%@-%@", flower.name, flower.color); 33 } 34 }
4.2 下面是输出结果:
经过以上步骤就实现了UIColor的存取。 转载请注明出处 @bbqe http://www.cnblogs.com/liufeng24/
原文:http://www.cnblogs.com/liufeng24/p/3516738.html
内容总结
以上是互联网集市为您收集整理的iOS开发之数据存取3-CoreData自定义数据类型全部内容,希望文章能够帮你解决iOS开发之数据存取3-CoreData自定义数据类型所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。