iOS持久化Core Data之三 托管对象模型的扩展

说明:按照《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

使用情景


(四) 数据验证错误














评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值