這是蘋果官方文檔 Core Data Programming Guide 的渣翻譯交惯。
當(dāng)你在應(yīng)用中定義了托管對(duì)象模型(MOM)并初始化了Core Data棧孩灯,你就可以開始創(chuàng)建數(shù)據(jù)存儲(chǔ)對(duì)象了哈误。
創(chuàng)建托管對(duì)象(MO)
一個(gè)NSManagedObject實(shí)例實(shí)現(xiàn)了基本的Core Data模型對(duì)象的需求卫枝。MO實(shí)例需要兩個(gè)要素:一個(gè)Entity描述(一個(gè)NSEntityDescription實(shí)例)苦锨,和一個(gè)托管對(duì)象上下文(一個(gè)NSManagedObjectContext實(shí)例)廉嚼。Entity描述包含類代表的Entity的名字矗烛、字段和關(guān)系辅柴。MOC代表了一個(gè)你用來創(chuàng)建MO的草稿板。MOC能跟蹤修改和對(duì)象之間的關(guān)系瞭吃。
在這個(gè)例子中碌嘀,NSEntityDescription類有一個(gè)類方法,這個(gè)方法接收一個(gè)string座位Entity的名字歪架、一個(gè)MO綁定的MOC的引用股冗。這個(gè)例子定義了返回對(duì)象為AAAEmployeeMO對(duì)象。
OBJECTIVE-C
AAAEmployeeMO *employee = [NSEntityDescription insertNewObjectForEntityForName:@"Employee" inManagedObjectContext:[self managedObjectContext];
SWIFT
let employee = NSEntityDescription.insertNewObjectForEntityForName("Employee", inManagedObjectContext: self.managedObjectContext) as! AAAEmployeeM
創(chuàng)建NSManagedObject的子類
默認(rèn)Core Data會(huì)返回NSManagedObject實(shí)例給你的應(yīng)用和蚪。但是如果為每個(gè)模型中的Entity定義一個(gè)NSManagedObject無疑是更有用的止状。特別是當(dāng)你創(chuàng)建了一個(gè)NSManagedObject的子類烹棉,可以利用代碼自動(dòng)完成來更好地調(diào)用屬性和方法。
在Xcode的Core Data編輯器中創(chuàng)建一個(gè)NSManagedObject的子類怯疤,在數(shù)據(jù)模型配置器的Entity編輯框峦耘,選擇一個(gè)Entity,輸入類名旅薄,這樣就完成了創(chuàng)建辅髓。
OBJECTIVE-C
#import <CoreData/CoreData.h>
@interface AAAEmployeeMO : NSManagedObject
@property (nonatomic, strong) NSString *name;
@end
@implementation AAAEmployeeMO
@dynamic name;
@end
SWIFT
import UIKit
import CoreData
import Foundation
class AAAEmployeeMO: NSManagedObject {
@NSManaged var name: String?
}
@dynamic標(biāo)簽通知編譯器這個(gè)變量會(huì)在運(yùn)行時(shí)再進(jìn)行解析。
當(dāng)這個(gè)子類在數(shù)據(jù)模型定義了并添加到了應(yīng)用中少梁,你就可以直接在應(yīng)用中引用洛口,提升你應(yīng)用代碼的可讀性。
保存NSManagedObject實(shí)例
NSManagedObject實(shí)例的創(chuàng)建不能持久化凯沪。當(dāng)你在MOC中創(chuàng)建了一個(gè)MO第焰,你必須保存這個(gè)修改到持久化存儲(chǔ)中。
OBJECTIVE-C
NSError *error = nil;
if ([[self managedObjectContext] save:&error] == NO) {
NSAssert(NO, @"Error saving context: %@\n%@", [error localizedDescription], [error userInfo]);
}
SWIFT
do {
try managedObjectContext.save()
} catch {
fatalError("Failure to save context: \(error)")
}
NSManagedObjectContext上save操作的調(diào)用接收一個(gè)NSError變量妨马,無論是成功還是失敗都會(huì)返回挺举。如果保存失敗,為了能糾正烘跺,能夠顯示出錯(cuò)誤原因是十分重要的湘纵。錯(cuò)誤原因的顯示可以輸出到控制臺(tái)或者顯示給用戶。如果保存方法返回成功滤淳,這個(gè)錯(cuò)誤變量不需要進(jìn)行考慮梧喷。