ios - 实体的核心数据可选属性如何工作?

标签 ios sqlite cocoa-touch core-data

我试图通过将实体属性设置为非可选来将其设置为不为空。

但是当我在测试用例中赋值nil属性时,没有报错也没有异常,测试成功了。顺便说一句,我如何确保此属性在单元测试中不是可选的?

Baby *baby = [self.babyModel createWithName:nil];
XCTAssertNil(baby.name);

当我在 sqlite 中检查表的架构时,它没有将其设置为不为空。这是否意味着此约束由核心数据堆栈而不是 sqlite 保证?

最佳答案

当您将核心数据实体属性设置为非可选时,您在尝试保存上下文时将会崩溃。在保存之前,您可以拥有具有 nil 非可选属性的对象,此时它会打破数据库的约束。

如果您取出 XCTAssertNil 并通过保存用于创建婴儿的上下文来替换它,您的测试应该会失败。

无论如何,我不确定您想用上述案例测试什么。您是否在 BabyModel 上测试 createWithName: 函数?您是否正在尝试测试 createWithName: 不允许创建没有名称的 Baby 对象?如果您回答您到底要测试什么代码路径,我可以帮助您编写更合适的测试。

关于ios - 实体的核心数据可选属性如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32366392/

相关文章:

iphone - IOS 中的警报通知

iphone - 我可以编码 NSManagedObject 的子类吗?

iphone - 当键盘滑入时如何禁用导航栏中的 'Done' 按钮?

iOS block - 避免循环保留

ios - 取消链接推特 : firebase ios swift

ios - 更改 UITableView 分隔符中插入区域的颜色

ios - 了解自动约束的设置位置

java - Android SQLiteDatabase 查询忽略空格

java - 如何从 SQLite 获取一行到具有自定义对象的模型?

sql - 插入包含单引号和双引号的 HTML 字符串的查询