Core.Data.by.Tutorials.v2.0 读书笔记 --NSManagedObject Subclasses

NSManagedObject Subclasses

数据模型

  • CoreData提供了任意的二进制数据,从图像到PDF文档,任何可以储存成序列化为0和1的东 西;

  • 巨型的数据快在内存中载入很慢,但是CoreData提供了Allows External Storage 选项; Core.Data.by.Tutorials.v2.0 读书笔记 --NSManagedObject Subclasses_第1张图片

存储不标准的数据类型

  • 例如:UIColor可以分成独立的几个小部分,每个小部分单独变成整数,当然也可以把UIColor存储成NSData类型;

(e.g., red: 255, green: 101,blue: 155)

  • 通过使用可转化类型(transformable type)将任何数据类型存储在CoreData里面,前提是遵循NSCoding协议;

Managed object subclasses

  • 字符类型的代码很容易造成输入拼写方面的错误,

//Set the name
person.setValue(name1, forKey: "name")
//Get the name
let name = person.valueForKey("name")

Xcode会自动生成了ManagedObjectSubclass(进入 Editor\Create NSManagedObjectSubclass 建立)

  • 生成NSManagedObjectSubclass过程,属性类型都会转化成Swift类型,映射如下Core.Data.by.Tutorials.v2.0 读书笔记 --NSManagedObject Subclasses_第2张图片

  • 如果我们想直接对最初的数据类型操作,可以选择Use scalar properties for primitive data types Core.Data.by.Tutorials.v2.0 读书笔记 --NSManagedObject Subclasses_第3张图片

  • NSManagedObjectSubclass 两个最主要的优势:1.减少输入时候的错误;2.添加新的方法及重写已存在的方法;

Propagating a managed context

func application(application: UIApplication, didFinishLaunchingWithOptions
launchOptions: [NSObject: AnyObject]?) -> Bool {
    let viewController = window!.rootViewController as! ViewController
    viewController.managedContext = managedObjectContext 
    return true
}

Core Data 中数据的有效性

Core Data 支持大多数数据类型的有效性
Core.Data.by.Tutorials.v2.0 读书笔记 --NSManagedObject Subclasses_第4张图片

处理不在范围内的错误:

func updateRating(numericString: String) {
    currentBowtie.rating = (numericString as NSString).doubleValue
    do {
        try managedContext.save() populate(currentBowtie)
    } catch let error as NSError {
        print("Could not save \(error), \(error.userInfo)")
        if error.domain == NSCocoaErrorDomain && (error.code ==     NSValidationNumberTooLargeError ||
    error.code == NSValidationNumberTooSmallError) {         
    rate(currentBowtie)
        } 
    }
}

总结

  • 创建了managed object subclasses;

  • 创造不同种数据类型的属性并检验了他们。

你可能感兴趣的:(ios,coredata)