• Core Data持久化数据存储(2)使用Core Data实现简单ShoppingCart应用程序


    转自 http://www.tuicool.com/articles/bEFFFj

    本节内容篇幅比较长!Core Data 属于 iOS App开发的进阶内容了。

    下面先使用Core Data实现一个简单的范例ShoppingCart。本范例App不利用框架自动生成代码,完全自己编写所有的 Core data 相关代码,来深入理解 Core Data框架中主要类的使用。

    使用Xcode的Single View Application模板,创建ShoppingCart项目,类前缀为Cart,如下图所示。

    添加CoreData Framework框架

    在ShoppingCart项目创建完成之后,我们需要添加CoreData Framework框架到项目中。详细操作步骤,可以参考-开发定位服务的App-教程中,添加Core Location框架的过程。

    添加好CoreData Framework之后,将CoreData Framework 拖放到项目的Frameworks目录中,让项目文件看起来更加有序。

    创建Data Model(数据模型)

    下一步在项目中添加Data Model,选择左侧的Core Data栏位,右侧选择Data Model模板,如下图示:

    输入名称 CartModel,并点击Create按钮。

    项目导航栏中创建了CartModel.xcdatamodeld 文件。 
    下面,我们在项目中创建Group,命名为Resources,如下图所示。

    我们将CartModel文件和Storyboard文件拖放到项目中的Resources 文件夹(或组)中。虽然这一操作不是必须的,但这样操作只是为了让项目文件管理有序。

    另外,在项目中再创建一个新组,命名为Model Class,后面会用到。完成之后,项目导航栏如下图所示。

    打开CartModel文件,如下图所示:

    接着添加Entity(实体)和Attribute(属性),类似于数据表和数据字段。点击上述CartModel界面底部的Add Entity按钮,添加一个新的Entity,命名为Customer。

    选择Customer实体,点击Attrubtes下面的+按钮,添加相应的Attribute字段。

    逐步添加customerID (Integer 32)、customerName (String)、password (String)和userName (String)属性字段。

    重复前面相同的步骤,创建ShoppingCartMaster和ShoppingCartDetail实体,并添加相应的Attribute字段,如下图所示。

    这里基于App演示的需要,定义的Entity都比较简单。

    下面建立这些Entity之间的关系(Relationship),点击CartModel底部的Editor Style,选择右侧的Graph样式。

    显示3个实体及其属性,有点像数据库中的三张表。

    [插图省略了]

    建立Entity之间的关系有2种方法:(1) 选择ShoppingCartMaster,点击并按住下面的Add Attribute 图标,直到出现弹出菜单,选择Add Relationship选项。

    选择新建立的关系,在右侧的Data Model inspector面板窗口,设置Relationship的相关属性,Name设置为 detail,Destination设置为 ShoppingCartDetail,另外选中 To-Many Relationship复选框,因为一个购物车中可能有多个商品。

    同时Delete Rule 可以选择Cascade,实现级联删除,表示在使用Core Data删除ShoppingCartMaster中一个对象时,关联的ShoppingCartDetail也将删除。 
    此时,我们发现Xcode有一个警告信息,如下图所示。

    [插图省略了]

    ShoppingCart/CartModel.xcdatamodeld/CartModel.xcdatamodel/: warning: Consistency Error: ShoppingCartMaster.detail does not have an inverse; this is an advanced setting (no object can be in multiple destinations for a specific relationship)

    意思是说刚刚创建的ShoppingCartMaster.detail关系没有反向关系。Apple建议每一个关系都创建一个反向关系。

    好吧!我们在创建一个反向关系。

    选择ShoppingCartDetail实体,和之前的操作一样,点击Add Relationship按钮,然后在右侧的Data Model inspector面板窗口,设置Relationship的相关属性,Name设置为 master,Destination设置为 ShoppingCartMaster,Inverse反向关系选择detail。之前创建的detail关系,其反向关系自动设置为master,可以检查一下看看。

    [插图省略了]

    (2) 另外一种建立Relationship的方法是,在该窗口中,选择实体Customer,按住Control键,并拖拉到shoppingCartMaster实体上。 
    同样,在Data Model inspector面板窗口中,设置Relationship的相关属性,如下图所示:

    [插图省略了]

    按照上面的拖拉操作建立Relationship会,一般会自动建立反向的关系,这个比较方便。将Customer实体到ShoppingCartMaster实体的关系命名为cart,将ShoppingCartMaster到Customer的关系命名为customer。

    下面是已经建立好Entity关系之后的效果图。

    下一步创建需要的NSManagedObjects 子类。

    选择CartModel中的三个Entity,接着选择Xcode中的Editor 菜单下面的Generate NSManagedObjects Subclass … 子菜单项。

    将生成的子类文件,可选择存放在ShoppingCart项目的Model Class文件夹中。在ShoppingCart项目导航栏中创建了6个文件,分别为Customer.h、Customer.m、ShoppingCartMaster.h、ShoppingCartMaster.m、ShoppingCartDetail.h和ShoppingCartDetail.m。

    [插图省略了]

    自动生成的这些文件可以让项目启用Core Data框架了,这些自动生成文件不要直接修改。这些自动生成的模型类,都继承NSManagedObject类-被管理对象,也就是数据库中数据表记录的对象表示。

    下面是Customer.h文件的代码,可以简单看看。

    #import <Foundation/Foundation.h>
    #import <CoreData/CoreData.h>

    @class ShoppingCartMaster;

    @interface Customer : NSManagedObject

    @property (nonatomic, retain) NSNumber * customerID; 
    @property (nonatomic, retain) NSString * customerName; 
    @property (nonatomic, retain) NSString * password; 
    @property (nonatomic, retain) NSString * userName; 
    @property (nonatomic, retain) ShoppingCartMaster *cart;

    @end

    未完待续!!!

    本教程的具体内容及其范例App都收录在《 一步一步学习iOS 6 编程 》的最新版PDF文件中。

  • 相关阅读:
    redis对string进行的相关操作
    bs4解析库
    redis对键进行的相关操作
    python常见的函数和类方法
    一些(也许)有用的技巧以及注意事项
    【复健内容】NOIP2020 题解
    类欧几里得的一个方法
    UOJ Round #12
    Goodbye Yiwei
    UOJ Round #11
  • 原文地址:https://www.cnblogs.com/linyawen/p/2970855.html
Copyright © 2020-2023  润新知