`
anlulu
  • 浏览: 43438 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ios中的core data 详细介绍

    博客分类:
  • ios
阅读更多

1.介绍

core data 在ios的sdk中是一个强大的框架,允许程序员去管理数据存储用面向对象的方式,传统上,程序员保存数据都是用文件归档的形式保存到硬盘上,读写都采用手动的方式去管理,既麻烦又耗时,而core data的出现,将在数据存贮方面大大提高效率。它很想java里面的hibernate.

 

core data 是 ios的程序但是需要一点设置,幸运的是,通过xcode,创建core data将变得非常简单,通过下面的介绍,让我们在xcode上创建一个 core data project:

 

  1. 打开xcode
  2. 从file menu中,选中New->new Project.....
  3. 在新工程的对话框中,确定左边选中的工程是在ios下,然后在左边的对话框中,选Empty Application,点击Next,如图:1-1

     1-1 
  4. 在你的工程界面,确认你的checkbox:use core data 选中,点击 Next,如图:1-2

     

     
  5. 现在你必须选择你的工程保存的目录,选中目标文件夹,点击创建按钮,如图1-3

    figure 1-3

因为我创建的是universal,所以这是一个既适用于ipad也适用于iphone的一个工程,现在假如你看的AppDelegate.h 文件,你会发现多了3个属性

  • managedObjectContext(属于NSManagedObjectContext类型)
  • managedObjectModal(属于NSManagedModal类型)
  • persistentStoreCoordintor(属于NSpersistentStoreCoodintor类型)

 

我知道这些概念可能会困扰你,但是和那些oracel,DB2已经存在的数据库概念相比,这些这是小巫见大巫,简单的不得了:

 NSpersistentStoreCoodintor:

这是连接物理的存储数据库文件和我们的应用程序之间的一座桥梁,这个桥梁能够管理不同的数据库上下文(NSmanagedObjectContext)

 

NSManagedObjectContext:

 这是连接你的应用程序和object model中间的另外一座桥梁,通过这个上下文,你可以实现增删改查等操作

NSManagedModel:

这个和数据库中表的概念差不多,很像hibernate中的数据库表的映射文件,里面也包括了基本类型和一般数据类型,一对多,多对多,一对一的关系。

 

 1.1创建一个coreData 

  • 解决方案
    打开你的项目中已经存在的CoreDataDemo1.xcdatamodeld,单击出现下面的界面:figure 1-4
 

 figure 1-4

点击Add Entity按钮添加一个实体,并且重命名为Friend,在左边依次添加属性  如图:figure 1-5

  • age(Integer 16)
  • name(String)
  • telphone(Integer 16)


 figure 1-5
 

1.2生成实体类 

 步骤如下:

  1. 在xcode中,找到后缀名.xcdatamodeld文件,右键点击添加一个文件,如图:figure 1-6

     
  2. 点击Next,选中当前工程保存,如图:figure 1-7



figure 1-7

 

现在,让我们看看我们的工程发现工程中多了两个文件,Friend.h和Friend.m文件,打开Friend.h文件,代码如下:

 

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


@interface Friend : NSManagedObject

@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSNumber * age;
@property (nonatomic, retain) NSNumber * telphone;

@end
 这个Friend.m代码如下:

 

 

#import "Friend.h"


@implementation Friend

@dynamic name;
@dynamic age;
@dynamic telphone;

@end
 至此,我们的实体类已经创建完毕,是不是很easy!

 

当你用 xcode创建了你的数据模型,你可以创建data relationships,entities,atrributes.然而,为了让你的数据模型能在程序中运行,你必须为你的数据模型生成这些代码,你应该已经注意到了所有的属性都是 dynamically动态的,在.m文件中用@dynamic修饰你的实体类的属性,这个属性是告诉编辑器我会在运行时生成对应的属性方法。当然你也可以对这些属性进行重新赋值(只读或只写),你可以加载它们从上下文中。

 

1.3 用core data 创建和保存数据

你已经创建了一个数据实体你想去实例化它,并且把它插入到Core Data上下文中。

现在,你可以用NSEntityDescription的 insertObjectForEntityForName:inManagedObjectContext: 方法去创建一个实体,一旦这个实体创建之后,你能更改它的属性,当你这样做的之后,你可以用上下文去保存 save:instance 

  • 打开AppDelegate.m文件,代码片段:
  • @synthesize managedObjectContext = _managedObjectContext;
    @synthesize managedObjectModel = _managedObjectModel;
    @synthesize persistentStoreCoordinator = _persistentStoreCoordinator;
     
  • 在程序加载完成后的方法里,代码如下:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

    Friend *newFriend = [NSEntityDescription
                         insertNewObjectForEntityForName:@"Friend"
                         inManagedObjectContext:self.managedObjectContext];
    
    if (newFriend != nil){
        
        newFriend.name = @"Anthony";
        newFriend.age = [NSNumber numberWithInt:21];
        newFriend.telphone =@"15011557849";
        
        NSError *savingError = nil;
        
        if ([self.managedObjectContext save:&savingError]){
            NSLog(@"Successfully saved the context.");
        } else {
            NSLog(@"Failed to save the context. Error = %@", savingError);
        }
        
    } else {
        NSLog(@"Failed to create the new Friend.");
    }

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    return YES;
}
  1.  在AppDelegate.m的下面,你会发现会有几个方法,分别是实现如下:
  • 设置managedObjectModel,数据库的模型映射文件
- (NSManagedObjectModel *)managedObjectModel
{
    if (_managedObjectModel != nil) {
        return _managedObjectModel;
    }
    NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"CoreDataDemo1" withExtension:@"momd"];
    _managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
    return _managedObjectModel;
}
  •  数据库文件和程序之间的连接桥:创建它需要NSmanagedObject
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
    if (_persistentStoreCoordinator != nil) {
        return _persistentStoreCoordinator;
    }
    
    NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"CoreDataDemo1.sqlite"];
    
    NSError *error = nil;
    _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
    if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {
    
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }    
    
    return _persistentStoreCoordinator;
}
  •  操作数据库的上下文,每个数据库的上下文,都要设置它被谁所管理,也就是要设置NSPersistentStoreCoordinator
- (NSManagedObjectContext *)managedObjectContext
{
    if (_managedObjectContext != nil) {
        return _managedObjectContext;
    }
    
    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
    if (coordinator != nil) {
        _managedObjectContext = [[NSManagedObjectContext alloc] init];
        [_managedObjectContext setPersistentStoreCoordinator:coordinator];
    }
    return _managedObjectContext;
}
 
至此,运行程序,我们在控制台发现,如图 figure 1-10,数据添加成功,看,是不是很简单,我们还可以对数据进行删除,修改,查询,等操作,还有利用tableview,把数据显示到表格中,进行一些列的操作,幸好,苹果的官方文档中,为我们集成了NSFetchedResultsController,这个控制器可以hi很好的帮我们完成工作,下个章节,我会详细介绍。

 

 figure 1-10

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 大小: 207.2 KB
  • 大小: 147 KB
  • 大小: 224.1 KB
  • 大小: 172.9 KB
  • 大小: 216.7 KB
  • 大小: 253.3 KB
  • 大小: 204.1 KB
  • 大小: 19.8 KB
分享到:
评论

相关推荐

    Pro Core Data for IOS

    在第四章“Creating a Data Model”中,介绍了如何创建和管理数据模型,这是使用Core Data进行高效数据管理的关键部分。第五章“Working with Data Objects”讲解了如何在应用中操作和管理数据对象,这是日常开发中...

    ios开发care data的使用

    在iOS开发中,Core Data是苹果提供的一种强大的数据管理框架,用于处理应用程序中的对象图和持久化存储。本文将深入探讨如何在iOS应用中使用Core Data来管理Care Data,通过提供的"iPhoneCoreDataRecipes"工程代码,...

    ios-Data.zip

    2. **Core Data**:Apple的Core Data框架是iOS和macOS开发中的首选数据管理工具,提供了一种模型驱动的方式去管理对象图及持久化。它负责对象的生命周期管理,包括创建、修改、删除以及与SQLite、Binary、XML等不同...

    Core.Data.in.Swift.Data.Storage.and.Management.for.iOS.and.OSX

    Discover the powerful capabilities integrated into Core Data, and how to use Core Data in your iOS and OS X projects. All examples are current for OS X El Capitan, iOS 9, and the latest release of ...

    Core Data iOS iOS iOS

    在iOS开发中,Core Data是苹果提供的一种强大的数据管理框架,用于处理应用程序的数据模型层。它不仅简化了数据存储,还提供了对象关系映射(ORM)功能,将数据库操作转化为面向对象的编程。本篇文章将深入探讨如何...

    Core Data by Tutorials v4.0 (Swift 4)

    本教程《Core Data by Tutorials v4.0》将详细解释以上概念,并通过实际项目演示如何在Swift 4环境中集成和使用Core Data。它会引导你逐步构建应用,涵盖从简单的数据存储到高级的查询和数据同步。无论你是初学者...

    IOS 关于core data 的练习

    在iOS开发中,Core Data是苹果提供的一种强大的数据管理框架,用于处理应用程序的模型层数据。这个练习将深入探讨如何使用Core Data来实现数据的添加和查询操作,这对于任何使用iOS SDK开发应用的开发者来说都是至关...

    《iOS Core Data高级编程 第二版》两本IOS数据编程之一

    此书在第一章“Getting Started”中介绍了Core Data的基本概念和配置,帮助开发者搭建Core Data的基础开发环境。 - **理解Core Data**:了解Core Data的工作原理是使用它的基础。第二章“Understanding Core Data”...

    ios-Core Data增查改删.zip

    在Core Data中,增加数据涉及到创建新的Managed Object实例,并将其保存到ManagedObjectContext。首先,我们需要加载MOM文件,然后获取Managed Object Context,接着创建一个实体的实例,设置其属性,最后调用`save:...

    IOS Core data

    IOS Core data A feature comparison of different frontend frameworks3 • Todo MVC - Todo list implemented in the many different types of frontend frameworks4

    Core Data iOS Essentials

    6. **多线程和并发处理**:介绍如何在多线程环境中安全地使用Core Data,避免数据冲突和错误。 7. **故障恢复与调试**:讨论故障恢复机制和调试技巧,确保应用程序能够在遇到问题时及时恢复并找出原因。 #### 四、...

    Pro Core Data for iOS.pdf

    这一章节首先介绍了Core Data的基本概念,包括它的设计目标、架构原理以及它在iOS开发中的地位。通过本章的学习,读者可以对Core Data有一个全面的认识,并理解其与其他数据管理技术的区别。 - **第2章:模型设计...

    Core Data in Objective-C Data Storage and Management for iOS and OS X(3rd)

    - 实体(Entity)是Core Data中最基本的概念之一,每个实体代表一种特定类型的对象。 - 属性(Attribute)定义了实体的特征,可以是简单的值类型如字符串或数字,也可以是其他实体的引用。 2. **对象上下文(Object ...

    Core_Data_by_Tutorials_v6.0.0.zip (iOS13 & Swift5.1 & Xcode11)

    In this book, you'll master Core Data in iOS using Swift. Comprehensive coverage of Core Data, from beginner to advanced topics. Covers setting up a Core Data Stack, data modeling, versioning and ...

    [iOS] Learning Core Data for iOS (英文版)

    [Addison-Wesley Professional] Learning Core Data for iOS A Hands-On Guide to Building Core Data Applications (E-Book) ☆ 图书概要:☆ This is the first Core Data book to fully reflect Apple’s ...

    Pro Core Data for iOS, Second Edition

    Fully updated for Xcode 4.2, Pro Core Data for iOS explains how to use the Core Data framework for iOS SDK 5 using Xcode 4.2. The book explains both how and why to use Core Data, from simple to ...

Global site tag (gtag.js) - Google Analytics