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

来源:互联网 发布:c语言闰年流程图 编辑:程序博客网 时间:2024/06/10 19:44

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

使用情景


(四) 数据验证错误














原创粉丝点击