在 Swift Playgrounds 中使用 Core Data 模型

本文讲的是在 Swift Playgrounds 中使用 Core Data 模型,


你能在 Xcode 的 Swift Playgrounds 中使用 Core Data 模型么?当然可以!

在2015年, http://www.learncoredata.com的作者 Jeremiah Jessel,写了篇文章 detailing how you can use the Core Data framework inside a playground。从建立 Core Data 堆栈到在代码中创建 NSManagedObjects,他向我们展示了如何处理这一过程中的所有事情。多么好的资料啊! 读完他的指南后,我开始思考:我很好奇你是否能拿到一个由 Xcode 的数据模型设计创建的 .xcdatamodeld 文件,并在某个背景使用这个文件... 简短的答案是不可以。你不能使用 .xcdatamodeld 文件(至少,我找不到可行的方法),但是你能用当你构建应用就生成的 “momd” 文件。 局限性 当我了解这个概念的时候我遇到了至少两个局限性/或者说是需要注意的地方。

##没有 NSManagedObject 子类 尽管你能在模型中创建实体的实例,如果你已经为实体创建了 NSManagedObject 的子类,在 Swift Playgrounds 中你还不能使用这些实体。你得用 setValue(_: forKey:) 在 NSManagedObject 实例中设置属性来解决这一问题。 但是这只是一个很小的缺陷,尤其是如果你只想稍微了解。 ##更新模型 你读过 walkthrough之后,将会知道如何在背景中引入模型。 总的说来是这样的:如果你曾经更改了模型,你需要操作必须的步骤来在资源文件夹中重新添加一个最新编译的模型。这是因为新加的资源是复制过来的,不是引用的。 我并不认为这是个很糟糕的缺点,尤其是你一旦了解怎么做的时候。 所以你要怎么做呢?看下面过程: ##攻略 在你的项目中加入一个数据模型,我们开始啦。如果你已经进行了一个使用 Core Data 的项目,在你的项目里可能已经有了一个 .xcdatamodeld 文件。如果你没有,这个 .xcdatamodeld 文件能从文件菜单中简单添加。 ##添加数据模型文件(除非你已经有一个) File -> New -> File… 

用冒烟测试来看以上方法是否可行,我将模型名字设置为默认的值 “Model.xcdatamodeld”。 ##添加带属性的实体 将数据模型添加到项目之后,我继续添加了一个带( 16 位的整数类型名字是 “attribute” )属性的(名字叫 “Entity” )实体: 

##添加 playground 下一步,我往项目里加了一个新的 playground: File -> New -> Playground…

##构建项目:定位 “momd” 文件 有一个 playground 并且一个数据模型结构化了,我构建了项目(CMD + B),因此 .xcdatamodeld 文件能被编译成一个 “momd” 文件。就是这个 “momd” 文件需要作为一个资源被添加到 playground 中。 要找到 “momd” 文件,在你的项目导航栏中展开 “Products”,右击 .app,单击 “Show in Finder”: 

##显示 .app 包的内容 在 finder 窗口,右击 .app 文件,然后单击 “Show package contents”: 

##从 finder 中把 “momd” 文件拖拽到 playground 的资源文件夹 

##写 Core Data 代码来使用模型 既然 “momd” 文件在 playground 的资源文件夹里,你能写代码了。你能插入NSManagedObject 实例,运行 fetch requests 等等。下面是我写的一个例子:

Core Data Playground

import UIKit
import CoreData

// Core Data 堆栈存在内存中
public func createMainContext() -> NSManagedObjectContext {

    //用你自己模型的名字替换 "Model"
    let modelUrl = NSBundle.mainBundle().URLForResource("Model", withExtension: "momd")
    guard let model = NSManagedObjectModel.init(contentsOfURL: modelUrl!) else { fatalError("model not found") }

    let psc = NSPersistentStoreCoordinator(managedObjectModel: model)
    try! psc.addPersistentStoreWithType(NSInMemoryStoreType, configuration: nil, URL: nil, options: nil)

    let context = NSManagedObjectContext(concurrencyType: .MainQueueConcurrencyType)
    context.persistentStoreCoordinator = psc

    return context
}

let context = createMainContext()

//插入一个新实体
let ent = NSEntityDescription.insertNewObjectForEntityForName("Entity", inManagedObjectContext: context)
ent.setValue(42, forKey: "attribute")

try! context.save()

//运行一个 fetch request
let fr = NSFetchRequest(entityName: "Entity")
let result = try! context.executeFetchRequest(fr)

print(result)

哇哦!这很酷啊。

别忘了 :如果你更新了模块,你需要重新构建你的应用,从 playground 的资源中删掉 “momd” 文件夹,再一次重新把新编译好的 “momd” 文件拖拽到 playground 中来运行最新版本的模型。

潜在的用处

除了“我想知道这是否可能”,另一个问的重要问题是“它是多么有用?”

  • 学习。 Playgrounds 本身作为一个学习工具有意义。能够搭建你在 Xcode 设计中思考的模块,把它导入一个 Playground ,并且把它当作一个学习练习来研究它,是多么酷啊!
  • 当你需要测试你的数据模块但是不想把它连到一个实际的用户交互的时候,也是有用的。在 playground 中抛掉所有用户交互复杂性,只研究数据模型!这似乎是一个比在控制台输出更优雅的解决方法
  • 有可能你需要为一个 fetch request 构建半复杂性的 NSPredicate 实例--为何不首先在 playground 中得到这个实例,然后把实例迁移到你的应用中呢?仅仅是个想法哦!





原文发布时间为:2016年08月02日


本文来自合作伙伴掘金,了解相关信息可以关注掘金网站。

时间: 2024-09-23 00:37:37

在 Swift Playgrounds 中使用 Core Data 模型的相关文章

iOS 开发中使用 Core Data 应避免的十个错误

Core Data是苹果针对Mac和iOS平台开发的一个框架主要用来储存数据.对很多开发者来说Core Data比较容易入手但很难精通如果没有正确的学习方法你将很难真正理解它更不用说精通了.很多开发者常常在这方面犯一些错误而这篇文章列出了 开发者在iOS开发过程中使用Core Data常见的一些错误并对如何避免这些错误进行了分析. 1.不了解关键术语 对于iOS开发者来说会使用Core Data是一项必备技能. 没有它很多app都不会存在.当在互联网上四处搜索Core Data学习教程你很容易被

obj-c编程15[Cocoa实例04]:基于Core Data的多文档程序示例[未完待续]

    上一个例子我们使用的模式数据实际上是基于一个Person数组,现在我们看一下如何使用Cocoa中的Core Data框架支持,几乎不用写一行代码,完成模式数据的建立.     我们这里模式的元素使用的是Car,其属性直接在Xcode中设置: 可以看到Car类型含有6中不同属性.接下来删除窗口中的文本控件,添加Array Controller控件,并将其Managed Object Context与File's Owner的managedObjectContext绑定.如下图: 将控制器的

「最简单」的 Core Data 上手指南

本文讲的是「最简单」的 Core Data 上手指南, 原文地址:The Easiest Core Data 原文作者:Alberto De Bortoli 译文出自:掘金翻译计划 译者:Zheaoli 校对者:Kulbear, cbangchen 在过去的几个月里,我花费了大量的时间在研究 Core Data 之上,我得去处理一个使用了很多陈旧的代码,糟糕的 Core Data 以及违反了多线程安全的项目.讲真,Core Data 学习起来非常的困难,在学习 Core Data 的时候,你肯定

《Core Data应用开发实践指南》一1.4 为现有的应用程序添加Core Data支持

1.4 为现有的应用程序添加Core Data支持 在Xcode中创建iOS应用程序项目时,可以使用各种起始模板(starting-point template).假如要根据Master-Detail.Utility Application或Empty Application等模板来创建项目,那么只需勾选Use Core Data,即可在项目中使用Core Data.不过,Grocery Dude项目是根据Single View Application模板创建的,它起初并没有包含Core Dat

《Core Data应用开发实践指南》一1.1 Core Data是什么

1.1 Core Data是什么 Core Data是个框架,它使得开发者可以把数据当成对象来操作,而不必在乎数据在磁盘中的存储方式.对于Objective-C程序员来说,这很有用,因为他们已经可以通过代码非常熟练地操作对象了.由Core Data所提供的数据对象叫做托管对象(managed object),而Core Data本身则位于你的应用程序和持久化存储区(persistent store)之间.持久化存储区是个通用的术语,指的是像SQLite数据库.XML文件(iOS不支持用XML文件

《Core Data应用开发实践指南》一2.12 后端SQL的可见性

2.12 后端SQL的可见性 如果只在控制台的日志中查看Core Data所输出的结果,那么意义并不算太大.你知不知道这些事情背后究竟发生了什么?Core Data对持久化存储区中的数据到底进行了哪些操作?这些操作是否恰当?为了提供无缝的Core Data体验,系统都生成了哪些SQL查询语句?每次在模拟器中运行程序的时候,是不是会插入重复的对象? 有个极其详尽的调试选项可以提供足够的信息,告诉你这些操作背后所发生的事情,从而令你知道上述那些问题的答案.这个调试选项会把系统自动生成的SQL查询语句

《Core Data应用开发实践指南》一2.7 属性的各种设置选项

2.7 属性的各种设置选项 图2-5右侧是Data Model Inspector,开发者可以在这个界面中配置类型之外的其他属性选项.选中某个属性之后,按"Option++3"组合键,即可显示该界面.可供配置的选项根据属性的类型而有所变化.并不是每一种属性都能配置下列选项:Transient 如果在Properties中勾选了这一项,那么该特性就不会写入持久化存储区了."不写入持久化存储区的特性"听上去有些奇怪,但有的时候,只需把特性留在托管对象上下文里面就行了.比

Core Data浅谈系列汇总

Core Data浅谈系列之一 : 基础结构 Core Data浅谈系列之二 : 简单的CURD Core Data浅谈系列之三 : 了解NSManagedObject和NSPredicate Core Data浅谈系列之四 : 数据模型的版本变迁 Core Data浅谈系列之五 : 在UITableView中展示 Core Data浅谈系列之六 : 验证用户输入 Core Data浅谈系列之七 : 使用NSFetchedResultsController Core Data浅谈系列之八 : 关

iOS App开发中Core Data框架基本的数据管理功能小结_IOS

一.何为CoreDataCoreData是一个专门用来管理数据的框架,其在性能与书写方便上都有很大的优势,在数据库管理方面,apple强烈推荐开发者使用CoreData框架,在apple的官方文档中称,使用CoreData框架可以减少开发者50%--70%的代码量,这虽然有些夸张,但由此可见,CoreData的确十分强大. 二.设计数据模型在iOS开发中,时常使用SQL数据库对大量的表结构数据进行处理,但是SQL有一个十分明显的缺陷,对于常规数据模型的表,其处理起来是没问题的,例如一个班级表,其