iOS7应用开发12:Core Data

简介: Core Data:一种数据库机制,可以用于保存应用中需要永久保存的数据,是一种面向对象的数据库,在ios中应用极为广泛。 应用方法: (1)在xcode中建立一个visual mapping,即在新建文件中选择Core Data->Data Model。

Core Data:一种数据库机制,可以用于保存应用中需要永久保存的数据,是一种面向对象的数据库,在ios中应用极为广泛。


应用方法:

(1)在xcode中建立一个visual mapping,即在新建文件中选择Core Data->Data Model。在Data Model文件中添加Entity,在Entity中添加attribute并设置类型。各个entity可以通过ctrl+拖动建立relation,并在右侧栏中设置relation的属性。

(2)另一种方式:通过NSManagedObjectContext——建立UIManagedDocument,并获取managedObjectContext属性;需在创建工程时选择“Use Core Data”。


UIManagedDocument:该类是UIDocument的派生类,提供了大量的数据保存相关的方法,可方便适应iCloud的应用;可视为Core Data数据库的简单容器;

* 创建UIManagedDocument对象

NSFileManager *fileManager = [NSFileManager defaultManager];
NSURL *documentsDirectory = [[fileManager URLsForDirectory:NSDocumentDirectory
inDomains:NSUserDomainMask] firstObject];! NSURL *url = [documentsDirectory URLByAppendingPathComponent:documentName];
UIManagedDocument *document = [[UIManagedDocument alloc] initWithFileURL:url];

* 如何判断UIManagedDocument所关联的文件是否存在:

BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:[url path]];
* 若文件存在,打开文件:

[document openWithCompletionHandler:^(BOOL success){/*blocks to excute when open*/}];
* 若不存在:创建文件:

[document saveToURL:url forSaveOperation:UIDocumentSaveForCreating completionHandler:^(BOOL success){/*blocks to execute when create is done*/}]
 由于打开/保存是异步操作所以必须采用completionHandler进行结束后的操作。

* 使用保存的文件之前检测状态:self.document.documentState == UIDocumentStateNormal;

* 关闭文件:如果没有强引用指针指向,则会自动关闭;手动关闭使用closeWithCompletionHandler:方法;


Core Data的操作:

1、向数据库中添加对象:

NSManagedObjectContext *context = aDocument.managedObjectContext;
NSMagedObject *photo = [NSEntityDescription insertNewObjectForEntityForName:@"ObjName" inMagagedObjectContext:context];
2、获取NSManagedObject对象中的attribute:采用NSKeyValueCoding协议中的两个方法:

- (id)valueForKey:(NSString *)key;
- (void)setValue:(id)value forKey:(NSString *)key;
其中key是data mapping中的attribute name,value是数据库中保存的数据。
更优方法:

建立NSManagerObject类的派生类:选中data model中的entity,在editor中选择Create subclass;完成后将为每一个entity建立头文件和源文件;
然后1中的添加操作就可以用下列语句表示:

NSManagedObjectContext *context = document.managedObjectContext;
Photo *photo = [NSEntityDescription insertNewObjectForEntityForName:@“Photo” inManagedObjectContext:context];
// then set the attributes in our Photo using, say, an NSDictionary we got from Flickr ...! e.g. photo.title = [flickrData objectFor//Key:FLICKR_PHOTO_TITLE];!
// the information will automatically be saved (i.e. autosaved) into our document by Core Data
// now here’s some other things we could do too ...!
NSString *myThumbnail = photo.thumbnailURL; !
photo.lastViewedDate = [NSDate date]; !
photo.whoTook = ...; // a Photographer object we created or got by querying
photo.whoTook.name = @“CS193p Instructor”; // yes, multiple dots will follow relationships!
3、在数据库中删除记录
[aDocument.managedObjectContext deleteObject:photo];


#分类category

category在第8篇中已经有过简单介绍,这里不再过多费口舌了。

需要强调的一点是,category的函数在实现的过程中不能使用局部变量。

【好累啊……%>_<%】


目录
相关文章
|
存储 数据库 Android开发
|
iOS开发
IOS Note - Core NS Data Types
NSString (Immutable)NSMutableString (rarely used)NSNumberNSValueNSData (bits)NSDateNSArray (Immutable) - once you create the array, you cannot add or ...
745 0
|
数据库 iOS开发 数据库管理
iOS开发笔记 7、数据【Preferences、文件、库、Core Data】
程序开发中根据要使用各种各样的数据,如配制、文件系统、数据库等,iOS对这个有很好的支持 Preferences If you’re going to create a program that has built-in preferences, you should do so using the Utility Application template.
974 0
|
2月前
|
API 数据安全/隐私保护 iOS开发
利用uni-app 开发的iOS app 发布到App Store全流程
利用uni-app 开发的iOS app 发布到App Store全流程
106 3
|
4月前
|
存储 iOS开发
iOS 开发,如何进行应用的本地化(Localization)?
iOS 开发,如何进行应用的本地化(Localization)?
123 2
|
4月前
|
存储 数据建模 数据库
IOS开发数据存储:什么是 UserDefaults?有哪些替代方案?
IOS开发数据存储:什么是 UserDefaults?有哪些替代方案?
43 0
|
2月前
|
API 开发工具 Android开发
iOS 和 Android 平台的开发有哪些主要区别?
iOS与Android开发区别:iOS用Objective-C/Swift,App Store唯一下载渠道;Android用Java/Kotlin,多商店发布(如Google Play、华为市场)。设计上,iOS简洁一致,Android灵活可定制。开发工具,iOS用Xcode,Android用Android Studio。硬件和系统多样性,iOS统一,Android复杂。权限管理、审核流程及API各有特点,开发者需依据目标平台特性进行选择。
38 3
|
13天前
|
前端开发 Android开发 iOS开发
【Flutter前端技术开发专栏】Flutter在Android与iOS上的性能对比
【4月更文挑战第30天】Flutter 框架实现跨平台移动应用,通过一致的 UI 渲染(Skia 引擎)、热重载功能和响应式框架提高开发效率和用户体验。然而,Android 和 iOS 的系统差异、渲染机制及编译过程影响性能。性能对比显示,iOS 可能因硬件优化提供更流畅体验,而 Android 更具灵活性和广泛硬件支持。开发者可采用代码、资源优化和特定平台优化策略,利用性能分析工具提升应用性能。
【Flutter前端技术开发专栏】Flutter在Android与iOS上的性能对比
|
13天前
|
存储 Swift iOS开发
使用Swift开发一个简单的iOS应用的详细步骤。
使用Swift开发iOS应用的步骤包括:创建Xcode项目,设计界面(Storyboard或代码),定义数据模型,实现业务逻辑,连接界面和逻辑,处理数据存储(如Core Data),添加网络请求(必要时),调试与测试,根据测试结果优化改进,最后提交至App Store或其它平台发布。
32 0