Swift 4.0 使用CoreData
创建文件
首先创建Data Model
添加属性
从别人那里借用的图片
使用
创建完成后就可以直接在项目中访问了,不需要再创建NSManageObject文件了。(我也是第一次使用coredata,在网上找了到处都是比较旧的教程。还有从appdelegate中获取context的)
- 创建一个context:NSManagedObjectContext
let context:NSManagedObjectContext = NSManagedObjectContext(concurrencyType: .confinementConcurrencyType)
- 创建一个store:addPersistentStore
//获取momd文件地址,该文件由xcode自动生成我们不需要管。文件名对应我们创建的CoreDataModel的文件名
let url = Bundle.main.url(forResource: "User", withExtension: "momd")
let model = NSManagedObjectModel(contentsOf: url!)
//申明一个store
let store = NSPersistentStoreCoordinator(managedObjectModel: model!)
//设置存储的位置
let docStr = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).last!
let sqlPath = docStr + "/mySqlite.sqlite"
let sqlUrl = NSURL.fileURL(withPath: sqlPath)
try? store.addPersistentStore(ofType: NSSQLiteStoreType, configurationName: nil, at: sqlUrl, options: nil)
//配置store
context.persistentStoreCoordinator = store
- 接下来可以通过该context进行操作啦。
读取数据
var mine:FCUser
let request = NSFetchRequest<FCUser>(entityName: "FCUser")
request.returnsObjectsAsFaults = true
request.fetchOffset = 0
let predicate = NSPredicate(format: "uid != null OR uid != ''") //读取所有uid !=null != ''的数据
request.predicate = predicate
do{
let results = try FCCoreDataContext.shared.context.fetch(request)
if results.count > 0 {
mine = results.first!
return
}
}catch{
fatalError("不能保存:\(error)")
}
mine = NSEntityDescription.insertNewObject(forEntityName: "FCUser", into: FCCoreDataContext.shared.context) as! FCUser