NSManagedObject Context
5762 ワード
一、概念
1.ore Dataはデータの持続化メモリの最適な方式です。
2.データの最終記憶タイプは、SQLiteデータベース、XML、バイナリ、メモリ、またはカスタムデータタイプとすることができます。
Mac OS X 10.5 Leopard以降のバージョンでは、開発者はNSPersistentStore類を継承することにより、独自のストレージフォーマットを作成することもできます。
3.メリット:メモリを合理的に管理し、sqlの使用を避けることができ、効率的である
4.構成:
(1)NSManagedObject Contect(管理されているデータコンテキスト)
実際の操作内容(持久層の操作)
作用:データの挿入、クエリデータの削除
(2)NSManagedObject Model(管理されているデータモデル)
データベースのすべてのテーブルまたはデータ構造には、各エンティティの定義情報が含まれています。
作用:エンティティの属性を追加し、属性間の関係を作成します。
操作方法:ビューエディタ、またはコード
(3)NSPersistent Storordinator(恒久化記憶アシスタント)
データベースに相当するコネクタ
役割:データ格納の名前、位置、保存方式、およびタイミングを設定する
(4)NSManagedObject(管理されているデータ記録)
データベース内のテーブルレコードに相当します。
(5)NSFetch Request(データ取得要求)
クエリ文に相当します。
(6)NSEntity Description(エンティティ構造)
テーブル構造に相当する
(7)拡張子は.xcdatamodedのカバンの中にあります。xcdata modelファイル、データモデルエディタで編集します。
コンパイル後は.momdまたは.momファイルです。
5.依存関係http://pic002.cnblogs.com/images/2012/373740/2012100910564755.png
二、SQLiteデータベースに基づく場合、Core Dataの簡単な使用
SQLiteとの違い:エンティティ全体の記録を取り出し、分解して、エンティティのある属性を得ることができます。
contextオブジェクトNSManagedObject Controtextを提供します。ユーザとデータの相互作用を担当するpersistentContiner:メモリ、CoreDを更新します。
1.ore Dataはデータの持続化メモリの最適な方式です。
2.データの最終記憶タイプは、SQLiteデータベース、XML、バイナリ、メモリ、またはカスタムデータタイプとすることができます。
Mac OS X 10.5 Leopard以降のバージョンでは、開発者はNSPersistentStore類を継承することにより、独自のストレージフォーマットを作成することもできます。
3.メリット:メモリを合理的に管理し、sqlの使用を避けることができ、効率的である
4.構成:
(1)NSManagedObject Contect(管理されているデータコンテキスト)
実際の操作内容(持久層の操作)
作用:データの挿入、クエリデータの削除
(2)NSManagedObject Model(管理されているデータモデル)
データベースのすべてのテーブルまたはデータ構造には、各エンティティの定義情報が含まれています。
作用:エンティティの属性を追加し、属性間の関係を作成します。
操作方法:ビューエディタ、またはコード
(3)NSPersistent Storordinator(恒久化記憶アシスタント)
データベースに相当するコネクタ
役割:データ格納の名前、位置、保存方式、およびタイミングを設定する
(4)NSManagedObject(管理されているデータ記録)
データベース内のテーブルレコードに相当します。
(5)NSFetch Request(データ取得要求)
クエリ文に相当します。
(6)NSEntity Description(エンティティ構造)
テーブル構造に相当する
(7)拡張子は.xcdatamodedのカバンの中にあります。xcdata modelファイル、データモデルエディタで編集します。
コンパイル後は.momdまたは.momファイルです。
5.依存関係http://pic002.cnblogs.com/images/2012/373740/2012100910564755.png
二、SQLiteデータベースに基づく場合、Core Dataの簡単な使用
SQLiteとの違い:エンティティ全体の記録を取り出し、分解して、エンティティのある属性を得ることができます。
contextオブジェクトNSManagedObject Controtextを提供します。ユーザとデータの相互作用を担当するpersistentContiner:メモリ、CoreDを更新します。
func getContext() -> NSManagedObjectContext {
let delegate = UIApplication.shared.delegate as! AppDelegate
let context = delegate.persistentContainer.viewContext
return context
}
CoreDataを継承するimport CoreData
1.エンティティの説明を作成する//1.2
let entityDes = NSEntityDescription.entity(forEntityName: "Student", in: self.getContext())
//1.1 Student
let st = NSManagedObject(entity: entityDes!, insertInto: self.getContext())
//1.3 student kvc
st.setValue(10, forKey: "age")
st.setValue(" ", forKey: "name")
//1.4
try! self.getContext().save()
print(NSTemporaryDirectory())
クエリー//1.
let resquest = NSFetchRequest(entityName: "Student")
//2.
let arr = try! self.getContext().fetch(resquest) as![NSObject]
//3. format: ( >,< =,)
let predicate = NSPredicate(format: "name = ' '", argumentArray: nil)
resquest.predicate = predicate
//2.1
for item in arr {
let name = item.value(forKey: "name")
let age = item.value(forKey: "age")
try! self.getContext().save()
print("name = \(name) age = \(age)")
}
//4.
let sort = NSSortDescriptor(key: "age", ascending: true)
resquest.sortDescriptors = [sort]
//5.
resquest.fetchOffset = 1
resquest.fetchLimit = 2
//6. ,
item.setValue(" ", forKey: "name")
//
self.getContext().delete(item as! NSManagedObject)
CoreData複数の教師と複数の学生との関係import UIKit
import CoreData
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
//1.2
let des = NSEntityDescription.entity(forEntityName: "Student", in: self.getContext())
//1.1
let student = NSManagedObject(entity: des!, insertInto: self.getContext())
//1.3
student.setValue(" ", forKey: "name")
student.setValue(12, forKey: "idCard")
let student1 = NSManagedObject(entity: des!, insertInto: self.getContext())
student1.setValue(" 1", forKey: "name")
student1.setValue(22, forKey: "idCard")
//2.2
let teDes = NSEntityDescription.entity(forEntityName: "Teacher", in: self.getContext())
//2.1
let teacher = NSManagedObject(entity: teDes!, insertInto: self.getContext())
//2.3
teacher.setValue(" ", forKey: "name")
teacher.setValue(12, forKey: "age")
let teacher1 = NSManagedObject(entity: teDes!, insertInto: self.getContext())
teacher1.setValue(" 1", forKey: "name")
teacher1.setValue(34, forKey: "age")
//3.1
var set = Set() //
set.insert(student)
set.insert(student1)
teacher.setValue(set, forKey: "students")
var stSet = Set() //
stSet.insert(teacher)
stSet.insert(teacher1)
student.setValue(stSet, forKey: "teachers")
try! self.getContext().save()
print(NSTemporaryDirectory())//
// teacher
let request = NSFetchRequest(entityName:"Teacher")
//
let pre = NSPredicate(format: "name=' '", argumentArray: nil)
request.predicate = pre
//
let arr = try! self.getContext().fetch(request) as! [NSManagedObject]
for item in arr {//
let set = item.value(forKey: "students") as! Set
for stu in set {
print(" \(stu.value(forKey: "name"))")
// item.setValue(" ", forKey: "name")
// print(item)
}
}
}
func getContext() ->NSManagedObjectContext{
let delegate = UIApplication.shared.delegate as! AppDelegate
let context = delegate.persistentContainer.viewContext
return context
}
}