说明:按照《Core Data 应用开发》的思路整理记录
本篇主要研究模型中实体之间的关系,已达到重复数据用关系取代,数据间建立联系。
Item 可以表示一种商品, Unit 用来表示它的单位,如 g、kg等。
这里需要考虑对应关系,比如上图,一个物品 Item 对应有一种重量属性,而一种重量属性可能对应很多种物品 Item。
(一) 两个带关系的 NSManagedObject 如何自定义
对于 item
@class UnitCD;
NS_ASSUME_NONNULL_BEGIN
@interface ItemObj : NSManagedObject
+ (NSFetchRequest<ItemObj *> *)fetchRequest;
@property (nullable, nonatomic, copy) NSString *name;
@property (nonatomic) float quantity;
@property (nullable, nonatomic, retain) NSData *photoData;
@property (nonatomic) BOOL collected;
@property (nonatomic) BOOL listed;
@property (nonatomic,retain) UnitCD *unit;
@end
NS_ASSUME_NONNULL_END
对于 unit
#import <CoreData/CoreData.h>
@interface UnitCD : NSManagedObject
@property(nonatomic,copy) NSString *name;
@property(nonatomic,retain) NSSet *items;
@end
存储:
NSArray *arrayObjs = @[@"Milk", @"Apples", @"Bread", @"Cheese", @"Orange Juice"];
UnitCD *unit = [NSEntityDescription insertNewObjectForEntityForName:@"Unit" inManagedObjectContext:_coreDataHelper.context];
unit.name = @"Kg";
for(NSString *itemName in arrayObjs){
ItemObj *item = [NSEntityDescription insertNewObjectForEntityForName:@"Item" inManagedObjectContext:_coreDataHelper.context];
item.name = itemName;
item.unit = unit;
}
[_coreDataHelper saveContext];
获取1:
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Item"];
NSArray *fetchedObjects = [_coreDataHelper.context executeFetchRequest:request error:nil];
for(ItemObj *item in fetchedObjects){
NSLog(@"%@ : %@", item.name, item.unit.name);
}
获取2:
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Unit"];
NSArray *fetchedObjects = [_coreDataHelper.context executeFetchRequest:request error:nil];
for(UnitCD *unit in fetchedObjects){
NSLog(@"unit : %@", unit.name);
NSSet *items = unit.items;
NSEnumerator *enumerator = [items objectEnumerator];
ItemObj *value;
while (value = [enumerator nextObject]) {
NSLog(@"%@ : %@", value.name, value.unit.name);
}
}
}
(三) 删除规则
配置关系时,要注意 Delete Rule 。规定删除时,相关对象如何处理。
1.Nullify
2.Cascade
3.Deny(validation error)
4.No Action
使用情景
(四) 数据验证错误