- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是一大批热衷于尝试 Mac OS X 开发的未经洗礼的 .NET 开发人员之一。目前我正在尝试弄清楚 Cocoa 的各种元素,但在核心数据上有点卡住了。
我注意到 Web 上提供的大多数文档和资源都涉及广泛的端到端教程,从模型、生成类、基于文档的 UI 等开始。似乎没有足够多的关注每一点,或者至少没有足够的例子。
有人可以为我指明正确的方向吗?无论是在线 Material 还是书籍,都可以为我提供各个方面的详细说明?也许我陷入了.NET世界,但我仍然在数据访问层等方面思考。我想了解“CRUD”的基础知识,例如设置持久存储、创建实体、编辑、保存存储等。只是基础知识,不详细说明 UI。如果我可以对各个部分进行单元测试,那就太好了。
我想我正在尝试进入正确的心态 - .NET 开发人员是否知道适合像我们这样研究 Cocoa 编程的人的阅读 Material ?
非常感谢,丹妮。
最佳答案
首先,正如 Apple 文档(以及 Apple 工程师反复评论)所述,Core Data 是一项“高级”Cocoa 技术。 Grokking Core Data 需要了解许多 Cocoa 范式和模式。说真的,先学习Cocoa。然后编写一个(或多个)没有 Core Data 的项目。然后学习核心数据。说真的。
为了平息你的好奇心,我将尝试一下 CRUD 答案,尽管这不会是你想要的答案。答案是 Core Data 没有 CRUD 模式,至少不是你想象的那样。原因是Core Data不是数据访问层。它是一个对象图管理框架。这意味着 Core Data 的明确预期工作是管理对象实例图。该图具有约束(例如关系的基数或对单个实例属性的约束)和通过该图进行级联更改(例如删除)的规则。核心数据管理这些约束。由于对象图可能太大而无法存储在内存中,因此 Core Data 为对象图提供了一个接口(interface),该接口(interface)通过故障模拟[1]内存中的整个对象图(当第一次将对象实例引入托管时,对象实例不是“故障”)对象上下文并被“触发”以延迟地从持久性存储中填充其属性)和唯一性(在上下文中仅创建特定实体实例(在持久性存储中)的一个内存中实例)。
Core Data 只是碰巧使用磁盘上的持久存储来实现大型对象图的接口(interface)。对于 SQLite 持久存储,此实现恰好使用 SQL 兼容的数据库。然而,这是一个实现细节。例如,您可以创建一个内存中持久存储,它不会将任何内容保存到磁盘,但允许 Core Data 像往常一样管理您的对象图。因此,Core Data 并不是真正的数据访问层。从这些角度来思考它会错过它的真正力量并会导致挫败感。您不能将 Core Data 与任意数据库模式一起使用(这就是为什么所有 Core Data 教程都从创建 NSManagedObjectModel 开始)。您不应该使用 Core Data 作为持久性框架并使用单独的模型层;您应该使用 Core Data 作为模型层,并利用 Core Data 的能力将模型的对象图保存到磁盘。
也就是说,要创建一个 NSManagedObjectContext
(它提供了我上面描述的对象图接口(interface)):
NSManagedObjectModel *mom = [NSManagedObjectModel mergedModelFromBundles:[NSArray arrayWithObject:[NSBundle mainBundle]]]; // though you can create a model on the fly (i.e. in code)
NSPersistentStoreCoordinator *psc = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:mom];
NSError *err;
// add an in-memory store. At least one persistent store is required
if([psc addPersistentStoreWithType:NSInMemoryPersistentStore configuration:nil URL:nil options:nil error:&err] == nil) {
NSLog(@"%@",err);
}
NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] init];
[moc setPersistentStoreCoordinator:psc];
(请注意,我假设您正在使用垃圾收集;此代码在手动内存管理环境中会泄漏)。
添加实体实例(继续上面的 moc
):
NSEntityDescription *entity = [NSEntityDescription entityForName:@"MyEntity" inManagedObjectContext:moc];
//entity will be nil if MyEntity doesn't exist in moc.persistentStoreCoordinator.managedObjectModel
NSManagedObject *obj = [[NSManagedObject alloc] initWithEntity:entity insertIntoManagedObjectContext:moc];
请注意,您需要实体描述来创建托管对象(为什么教程从模型开始),并且您无法在没有托管对象上下文的情况下创建托管对象。
更新实体实例:
[obj setValue:myValue forKey:@"attributeKey"]; //or use any method on `obj` that updates its state
NSError *err;
if(![moc save:&err]) {
NSLog(@"%@", err); // an erro occurred in saving, perhaps due to optimistic locking failure
}
删除实体实例:
[moc deleteObject:obj];
if(![moc save:&err]) {
NSLog(@"%@", err); // an erro occurred in saving, perhaps due to optimistic locking failure
}
[1]:对于二进制或 XML 持久存储,整个图存储在内存中
关于.net - Cocoa Core Data 新手指南,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1714054/
只是想知道这些结构之间有什么区别(text、data、rodata、bss 等)在链接描述文件中: .data : { *(.data) } .data : { *(.data*) }
Data 定义为其核心功能之一 gfoldl : gfoldl :: (Data a) => (forall d b. Data d => c (d -> b) -> d -> c b)
以下之间有什么区别:data-sly-use、data-sly-resource、data-sly-include 和 数据-sly-模板?我正在阅读 Sightly AEM 上的文档,我非常困惑。
我有一个 Spring Boot、Spring Data JPA (hibernate) Web 应用程序,并且想引入文本搜索功能。 我理解以下内容 hibernate search 或 spring
我不知道我的代码有什么问题。我读了其他有同样问题的人的一些问题,但没有找到答案。当我尝试编译时出现以下错误: ||In function 'main':| |35|error: expected ex
我不太确定为什么会收到此错误或其含义。我的数据框称为“数据”。 library(dplyr) data %>% filter(Info==1, Male==1) %>% lm(CFL_
我一直在 GitHub 等更现代的网站上看到这些属性,它们似乎总是与自定义的弹出窗口一致,如 title 属性。 Option 1 Option 2 Option 3 Option 4 我在 HTML
如何用 iCloud Core Data 替换我现有的 Core Data?这是我的持久商店协调员: lazy var persistentStoreCoordinator: NSPersistent
我一直在 GitHub 等更现代的网站上看到这些属性,它们似乎总是与自定义的弹出窗口一致,如 title 属性。 Option 1 Option 2 Option 3 Option 4 我在 HTML
我正在通过 this project 在 Android 上摆弄 node.js ,我需要一种方法将 js 文件部署到私有(private)目录(以隐藏源代码,防止用户篡改),该目录也物理存在于文件系
大家好我有点沮丧,所以我希望得到一些帮助。我的项目在 SwiftUI 中。我想使用图像选择器将图像保存到 Core Data。我实现了让 ImagePicker 工作,但我正在努力转换 Image -
我有以下数据和代码: mydf grp categ condition value 1 A X P 2 2 B X P 5
我一直在努力解决这个问题,但我根本找不到任何解决问题的方法。希望这里有人可以提供帮助。 我正在尝试为具有以下结构的某些数据创建个人选择矩阵: # A tibble: 2,152 x 32 a
我了解 Data.Map.Lazy 和 Data.Map.Strict 是不同的。但是,当您导入 Data.Map 时,您究竟导入了什么:严格的、惰性的还是两者的组合? 最佳答案 懒人。看着docs
我正在开发一个 C 程序,用于从 BerkeleyDB DBTree 数据库中提取数据值与特定模式匹配的记录。我创建数据库,打开它,将键的 DBT 和数据的另一个 DBT 清零,将 DBT 标志设置为
所以我有以下成员(member)历史表 User_ID | Start date | End Date | Type(0-7) | ---------------------------
随着最近推出的包dataframe ,我认为是时候正确地对各种数据结构进行基准测试,并突出每种数据结构的优势。我不是每个人的不同优势的专家,所以我的问题是,我们应该如何对它们进行基准测试。 我尝试过的
我有来自 API 的数据,但无法将数组中的数据设置为 vue.js 中的 this.data这是来自 API 的数据(JSON) 你能告诉我这个语法吗 {"id":1613, "name_org":"
在 Vue.js到目前为止,我已经找到了两种定义数据的方法:data: {} 和 data() { return; }. data: { defaultLayout: 'default' }
我正在研究Spring Data Rest Services,并在自定义拦截器中遇到一些问题。之前我使用spring-data-rest-webmvc 2.2.0并以以下方式添加了拦截器。 publi
我是一名优秀的程序员,十分优秀!