关于Core Data的一些整理(二)
创建NSManagedObject的子类时,有一点是在这中间要强调的一点是,要不要勾选 Use scalar properties for primitive data types。
勾选上这个选项之后就是使用的是你在定义的时候使用的原始数据类型。
如果没有勾选的话,就会存在类型的转化,转换情况如下:
- String maps to String
- Integer 16/32/64, Float, Double and Boolean map to NSNumber
- Decimal maps to NSDecimalNumber
- Date maps to NSDate
- Binary data maps to NSData
- Transformable maps to AnyObject
之后生成四个文件如下:
上面两个负责数据属性部分,下面两个负责数据操作部分
若在使用中修改了Core Data文件,重新创建子类即可,新生成的文件只有上面两个并覆盖原来的文件,下面的数据操作部分并不会新建
代码需要注意的地方不多,有下面两点:
- 为NSFetchRequest添加NSPredicate条件
//建立匹配请求,并添加判断语句
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Bowtie"];
NSString *firstTitle = [self.segmentedControl titleForSegmentAtIndex:];
request.predicate = [NSPredicate predicateWithFormat:@"searchKey == %@", firstTitle];
NSArray *results = [self.managedContext executeFetchRequest:request error:nil];
self.currentBowtie = results.firstObject;
- 保存图片时可以选择Allows External Storage,你数据库内存的就不是图片,而是图片在你文件夹内的路径
//对图片保存进行处理
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Bowtie" inManagedObjectContext:self.managedContext];
Bowtie *bowtie = [[Bowtie alloc] initWithEntity:entity insertIntoManagedObjectContext:self.managedContext];
bowtie.photoData = UIImagePNGRepresentation([UIImage imageNamed:dict[@"imageName"]]);