Swift Core Data

本文详细介绍了如何在Swift中使用Core Data,包括创建数据模型、建立关系、在代码中操作数据库,以及如何处理抛出的错误。同时,文章探讨了如何利用NSFetchedResultsController进行UITableView与Core Data的高效交互,实现数据同步。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Swift Core Data

首先需要创建一个模版,进去“file”->“new”->”file”->”Core Data”->”Data Model”。

然后点击右下角的“add entity”。
这里写图片描述

在Xcode里面这个Entity会变成一个NSMangedObject的一个实体。Xcode的数据库是基于SQL的,所以每一个entity会有属性、关系以及fetched properties(用于搜索?)。

可以通过NSMangedObject的两个函数来更改属性的值。

创建关系

进入视图显示模式,ctrldrag两个entity。然后修改两个relations的名字。
这里写图片描述

然后可以修改它们n对n的约束(type)。

这里写图片描述

这样子会把tweets这一个关系变成NSSet。

在代码中使用

在代码中使用这些数据库需要使用NSManagedObjectContext。

在创建开始的项目的时候,如果选择了“Use Core Data”,那么Xcode会自动帮我们创建一些方法(在AppDelegate)。当然也可以我们自己创建UIManagedDocument。

创建代码
首先为他们创建subclass。
这里写图片描述

记得要选择swift。

不过创建的时候出现了错误提示,要解决这个问题可以参考这里

插入行至数据库

NSEntityDescription.insertNewObjectForEntityForName("Tweet", inManagedObjectContext: moc)

这里写图片描述

访问某一行的属性(列)

func valueForKey(String) -> AnyObject?
func setValue(AnyObject?, forKey: String )

保存

context.save()

但是这个方法有一个问题,就是可能会抛出错误,我们必须学习一下swift中错误抛出的处理方式。

删除

mangedObjectContext.deleteObject(tweet)

搜索
使用NSFetchRequest来进行。你需要规定想抓取的Entity,以及抓取的规模和限制。

同时也需要规定返回的string的排序方式(使用NSSortDescripitor)。
这里写图片描述

NSPredicate则是规定我们需要什么,注意其中的%@有点像printf里的%f。
这里写图片描述

上面的图片返回的是joe在aDate后创建的tweets以及screenName是CS193p的tweeter。

例子
这里写图片描述
这里写图片描述

Thrown Errors

do {
    try context.save()
} catch let error {
    //里面会有NSError,它提供一些方法可以处理这些错误。 
}

UITableView和Core Data的交互

因为大量的数据非常适合使用Table View来展示,所以xcode直接提供了一个NSFetchedResultsController类来实现。它可以总是和数据库同步。
这里写图片描述
这里写图片描述

创建一个NSFetchedResultsController的方法:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值