coreData

CoreData使用

  • 创建步骤流程
    • 第一步先创建.xcdatamodeld文件(New File -> iOS -> Core Data ->Data Model)

屏幕快照 2016-07-07 下午10.40.16.png

名字虽然可以任意取,但最好还是取和自己存储数据库名字一样的名字。这样可读性更高些。(ps:这个文件就相当于数据库文件一样,数据库文件中可以有多个表,表中可以有各个字段值,这里也可以有多个实体,每个实体有各个键值)


屏幕快照 2016-07-07 下午10.40.40.png

通过上面的操作就可以创建一个.xcdatamodeld文件,现在我们点击这个文件,在最下面找到Add Entity按钮,进行实体添加。


屏幕快照 2016-07-13 下午8.50.10.png

现在我们添加了一个名字为Entity的实体,这个名字是默认名字,现在我们可以对他进行名字的更改,对它双击一下即可修改名字,或者在xcode右边的信息栏中也可以修改


屏幕快照 2016-07-13 下午9.09.38.png

通过上面操作我们已经创建好了实体的名字,现在我们需要往实体中添加我们需要的键值。(ps:相当于数据库表中的字段),具体操作看图说话(实体之间的关联我就不介绍了,有兴趣的可以自行搜索资料,个人觉得会了单个实体创建外加查询就行,关联也无非是找到关联的实体中共同的键值从而取得另外一个实体对象,我们可以直接先从一个实体取得指定键值对应的属性,再通过属性值去查询另一个实体,只是没关联的那么方便而已)。


屏幕快照 2016-07-13 下午9.17.43.png
  • 第二步创建关联类来操控CoreData实体对象(选中.xcdatamodeld文件->xcode菜单栏->Edit->Create NSManagedObject Subclass)

屏幕快照 2016-07-13 下午9.35.57.png

选中自己需要关联的.xcdatamodeld文件名称,点击下一步即可。


屏幕快照 2016-07-13 下午9.47.24.png

选中.xcdatamodeld文件中需要关联的实体对象,点击下一步然后在选择存储目录即可。




完成后会发现自动生成了实体名称对应的类和扩展类(Entity.h/.m和Entity+CoreDataProperties.h/.m)




Relationships类似于SQLite的外键,定义了在同一个模型中,实体与实体之间的关系。可以定义为对一关系或对多关系,也可以定义单向或双向的关系,根据需求来确定。如果是对多的关系,默认是使用NSSet集合来存储模型。

Inverse是两个实体在Relationships中设置关联关系后,通过设置inverse为对应的实体,这样可以从一个实体找到另一个实体,使两个实体具有双向的关联关系。


//

//  ViewController.m

//  CoreDataDemo

//  

//  Created by pk on 14/10/24.

//  Copyright (c) 2014 pk. All rights reserved.

//


#import "ViewController.h"

#import <CoreData/CoreData.h>

#import "User.h"

#import "WuGong.h"


@interface ViewController (){

    IBOutlet UITextField* _nameField;

    IBOutlet UITextField* _scoreField;

    //管理者上下文,我们直接调用的类

    NSManagedObjectContext* _context;

}


- (IBAction)add:(id)sender;

- (IBAction)fetch:(id)sender;


@end


@implementation ViewController


- (void)viewDidLoad {

    [super viewDidLoad];


    _context = [[NSManagedObjectContextalloc] init];

    //user模型

    NSManagedObjectModel* user = [NSManagedObjectModelmergedModelFromBundles:nil];

    //协调者

    NSPersistentStoreCoordinator* coordinator = [[NSPersistentStoreCoordinatoralloc] initWithManagedObjectModel:user];

    //储存方式

    NSString* path = [NSHomeDirectory()stringByAppendingPathComponent:@"Documents/abcd.db"];

    [coordinator addPersistentStoreWithType:NSSQLiteStoreTypeconfiguration:nilURL:[NSURLfileURLWithPath:path] options:nilerror:nil];

    _context.persistentStoreCoordinator = coordinator;

}


- (void)add:(id)sender{

    User* user = [NSEntityDescriptioninsertNewObjectForEntityForName:@"User"inManagedObjectContext:_context];

    user.name = _nameField.text;

    user.score = [NSNumbernumberWithInt:[_scoreField.textintValue]];

    user.wugong = [NSEntityDescriptioninsertNewObjectForEntityForName:@"WuGong"inManagedObjectContext:_context];

    user.wugong.name =@"葵花宝典";

    

    //保存

    if ([_contextsave:nil]) {

        NSLog(@"保存成功");

    } else {

        NSLog(@"保存失败");

    }

}


- (void)fetch:(id)sender{

    //查询请求

    NSFetchRequest* request = [[NSFetchRequestalloc] init];

    //关联要查询的实体

    NSEntityDescription* entity = [NSEntityDescriptionentityForName:@"User"inManagedObjectContext:_context];

    [request setEntity:entity];

    

    //指定对结果的排序方式

    NSSortDescriptor* sortDescriptor = [[NSSortDescriptoralloc] initWithKey:@"name"ascending:YES];

    NSArray* sortDescriptions = [[NSArrayalloc] initWithObjects:sortDescriptor,nil];

    [request setSortDescriptors:sortDescriptions];

    

    //开始查询

    NSArray* array = [_contextexecuteFetchRequest:request error:nil];

    for (User* userin array) {

        NSLog(@"%@-%@-%@", user.name, user.score, user.wugong.name);

//        if ([user.name isEqualToString:@"haha"]) {

//            user.score = @90;

//            [_context save:nil];

            [_context deleteObject:user];

//        }

    }

}






@end





本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/458449.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

命令行下mysql新建用户及分配权限

创建用户&#xff1a; CREATE USER usernamehost IDENTIFIED BY password; 说明:username – 你将创建的用户名, host – 指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost, 如 果想让该用户可以从任意远程主机登陆,可以使用通配符%. password – 该用户的登陆密…

PetaPoco初体验(转)

PetaPoco初体验&#xff08;转&#xff09; PetaPoco初体验&#xff08;转&#xff09;大部分转自&#xff1a; http://landyer.com/archives/138 PetaPoco C#微型ORM框架&#xff0c;基本无需配置&#xff0c;仅由单个cs文件构成&#xff0c;支持.net3.5 .net4.0。 截稿时Peta…

iOS当中的设计模式

代理模式 应用场景&#xff1a;当一个类的某些功能需要由别的类来实现&#xff0c;但是又不确定具体会是哪个类实现。 优势&#xff1a;解耦合 敏捷原则&#xff1a;开放-封闭原则 实例&#xff1a;tableview的 数据源delegate&#xff0c;通过和protocol的配合&#xff0c…

c#的dllimport使用方法详解

DllImport是System.Runtime.InteropServices命名空间下的一个属性类&#xff0c;其功能是提供从非托管DLL&#xff08;托管/非托管是微软的.net framework中特有的概念&#xff0c;其中&#xff0c;非托管代码也叫本地&#xff08;native&#xff09;代码。与Java中的机制类似&…

each函数循环数据表示列举,列举循环的时候添加dom的方法

var dotBox $(#bannerNum);var item <li></li>;var itemSize $(#bannerBack p).length;var dotBoxWidth itemSize*24;$(#bannerBack p).each(function () { dotBox.append(<li></li>); dotBox.find(li).eq(0).addClass(current);});这里要根…

使用lxml代替beautifulsoup

深入使用过lxml的都会深深地喜欢上它,虽然BeautifulSoup很流行,但是深入了解lxml后,你就再也不会使用bs了 我觉得beautifulsoup不好用,速度也慢(虽然可以使用lxml作为解析器了).另外soup.find_all这种简直就是手工时代的操作(很多人使用find find_all这几个函数, 其实它们使用起…

QT调用dll且进入DLL src code调试

qt应用程序AA.exe调用qt写的BB.DLL时&#xff0c;进入BB.DLL src code调试 1、debug生成AA.exe 2、将debug生成的AA.exe整包debug folder放到BB.dll的debug生成的文件夹中 3、设置BB.dll这个project&#xff1a;项目----运行-----Executable中选择BB.dll的debug文件夹中的AA.ex…

php安装编译时 configure: error: Cannot find OpenSSL's evp.h

yum install error: protected multilib versions errorsudo yum downgrade openssl 降级sudo yum install openssl-devel 另外参考yum install -y ncurses-devel yum install openssl openssl-develyum install openssl openssl-devel --setoptprotected_multilibfalse ln -s …

laravel项目中css样式表的背景图片不显示

刚学laravel&#xff0c;遇到了很多坑&#xff0c;感觉laravel是挺强大的。 建好后台项目&#xff0c;奈何css样式表的背景图片不显示 .mainhd {background: url(../images/sky/body_bg.png) repeat-x 0px 0px; } 按理上面的写法没错&#xff0c;因为是从别的后台搬过来的&…

KVC KVO

1、KVC&#xff0c;即是指 NSKeyValueCoding&#xff0c;一个非正式的Protocol&#xff0c;提供一种机制来间接访问对象的属性。而不是通过调用Setter、Getter方法访问。KVO 就是基于 KVC 实现的关键技术之一。 Demo&#xff1a; interface myPerson : NSObject { …

VS2010中 C++创建DLL图解

一、DLL的创建 创建项目: Win32->Win32项目&#xff0c;名称&#xff1a;MyDLL 选择DLL (D) ->完成. 1、新建头文件testdll.htestdll.h代码如下&#xff1a;#ifndef TestDll_H_#define TestDll_H_#ifdef MYLIBDLL#define MYLIBDLL extern "C" _declspec(dllimp…

js理解 call( ) | apply( ) | caller( ) | callee( )

被js的这几个方法搞的this晕头转向&#xff0c;下定决心搞清楚&#xff1b;1、call( )和apply( ):两者都可以将函数绑定到另外一个对象上去运行&#xff0c;只是参数的传递方式不同&#xff0c;两者都可以使当前函数拥有另一个对象的属性和方法&#xff0c;实现js下的继承&…

上传SVN丢失.a文件的问题

iOS项目上传到svn中&#xff0c;.a文件丢失 用Cornerstone工具&#xff0c;解决这个问题 1.打开Cornerstone左上角&#xff0c;点Cornerstone->Preferences->Subversion 2.Global lgnores下面有一个Use default global ignores 默认这里方框中会打钩&#xff08;这就是.a…

使用公用表表达式的递归查询

微软从SQL2005起引入了CTE(Common Table Expression)以强化T-SQL。公用表表达式 (CTE) 具有一个重要的长处&#xff0c;那就是可以引用其自身。从而创建递归 CTE。递归 CTE 是一个反复运行初始 CTE 以返回数据子集直到获取完整结果集的公用表表达式。 当某个查询引用递归 CTE 时…

C#委托实现C++ Dll中的回调函数

from:https://blog.csdn.net/ferrycooper/article/details/63261771很多的Dll都是C和C写的&#xff0c;那么如果C#想要调用Dll中的函数怎么办&#xff0c;尤其是Dll函数其中一个参数是函数指针的&#xff0c;即里面有回掉函数的用C#怎么实现&#xff1f; C中的回掉函数在C#中有…

安装Birt方法

安装BIRT 方法&#xff1a; 博客地址&#xff1a;http://www.mamicode.com/info-detail-850588.html 注意&#xff1a;在 Install new Software 中输入地址&#xff1a;http://download.eclipse.org/birt/update-site/4.2-interim 看好了 出来的四项要全部选中 &#xff0c;然后…

iOS NSString和NSDate转换

后台返回的时间字符串不是标准的时间而是计算机时间的时候&#xff0c;我们需要将它们转换为标准时间&#xff0c;再进行转换。 //字符串转为时间&#xff0c;时间格式自己定 NSString * time "1501776000"; //时间字符串 NSInteger num [time integerValue]; …

15个最好的HTML5前端响应式框架(2014)

文中的多个框架基于SASS创建&#xff0c;SCSS是一种比LESS更简洁的样式表编程语言&#xff0c;它能够编绎成CSS&#xff0c;可复用CSS代码&#xff0c;声明变量&#xff0c;甚至是函数&#xff0c;类Ruby/Python的语法。參见&#xff1a; LESS vs SASS&#xff1f;选择哪种CSS样…

DLL导出类和导出函数

from:https://blog.csdn.net/goodluckmt/article/details/526912971、动态库DLL中的类或者函数有时候要被其他的库调用&#xff0c;因此需要被其他库调用的类或者函数需要进行导出。 2、首先编写需要导出的DLL&#xff0c;新建一个工程设置应用程序类型为DLL3、类的代码如下 头…

Nginx做web服务器linux内核参数优化

Nginx做web服务器linux内核参数优化Nginx提供web服务时Linux内核参数调整是必不可少的&#xff0c;其中在优化方面就需要我们格外的注意。在下面就是对Linux内核参数优化的详细介绍&#xff0c;希望大家有所收获。关于Linux内核参数的优化&#xff1a;net.ipv4.tcp_max_tw_buck…