1.3 创建和保存NSManagedObject (Core Data Programming Guide翻译)

这是苹果官方文档 Core Data Programming Guide 的渣翻译。

当你在应用中定义了托管对象模型(MOM)并初始化了Core Data栈,你就可以开始创建数据存储对象了。

创建托管对象(MO)

一个NSManagedObject实例实现了基本的Core Data模型对象的需求。MO实例需要两个要素:一个Entity描述(一个NSEntityDescription实例),和一个托管对象上下文(一个NSManagedObjectContext实例)。Entity描述包含类代表的Entity的名字、字段和关系。MOC代表了一个你用来创建MO的草稿板。MOC能跟踪修改和对象之间的关系。

在这个例子中,NSEntityDescription类有一个类方法,这个方法接收一个string座位Entity的名字、一个MO绑定的MOC的引用。这个例子定义了返回对象为AAAEmployeeMO对象。

OBJECTIVE-C

AAAEmployeeMO *employee = [NSEntityDescription insertNewObjectForEntityForName:@"Employee" inManagedObjectContext:[self managedObjectContext];

SWIFT

let employee = NSEntityDescription.insertNewObjectForEntityForName("Employee", inManagedObjectContext: self.managedObjectContext) as! AAAEmployeeM

创建NSManagedObject的子类

默认Core Data会返回NSManagedObject实例给你的应用。但是如果为每个模型中的Entity定义一个NSManagedObject无疑是更有用的。特别是当你创建了一个NSManagedObject的子类,可以利用代码自动完成来更好地调用属性和方法。

在Xcode的Core Data编辑器中创建一个NSManagedObject的子类,在数据模型配置器的Entity编辑框,选择一个Entity,输入类名,这样就完成了创建。

OBJECTIVE-C

#import 
 
@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标签通知编译器这个变量会在运行时再进行解析。

当这个子类在数据模型定义了并添加到了应用中,你就可以直接在应用中引用,提升你应用代码的可读性。

保存NSManagedObject实例

NSManagedObject实例的创建不能持久化。当你在MOC中创建了一个MO,你必须保存这个修改到持久化存储中。

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操作的调用接收一个NSError变量,无论是成功还是失败都会返回。如果保存失败,为了能纠正,能够显示出错误原因是十分重要的。错误原因的显示可以输出到控制台或者显示给用户。如果保存方法返回成功,这个错误变量不需要进行考虑。

你可能感兴趣的:(1.3 创建和保存NSManagedObject (Core Data Programming Guide翻译))