- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
下面最小示例中的代码(如此之小以至于没有真正意义......)崩溃:*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<__lldb_expr_345.People 0x60800002a5a0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key names.'
如果字典是从 [String, LastName?]
改变的,它工作得很好至 [String, LastName]
.所以我猜类型 Optional<LastName>
不能用 KVC 表示怎么办?我认为它能够将类型推断为 _Nullable
.
如何使此代码与包含可选值(我自己的 NSObject 子类或值类型)的字典一起使用?
class LastName: NSObject {
let name: String
init(_ name: String) { self.name = name }
override var description: String { return name }
}
class People: NSObject {
var names: [String: LastName?] = [:] //problem caused by optional `Lastname`
override var description: String {
return "names: \(names)"
}
}
func createPeople(_ names: [String: LastName]) -> NSObject {
let classType: NSObject.Type = People.self
let instance = classType.init()
instance.setValue(names, forKey: "names") //crash here NSUnknownKeyException
return instance
}
print(createPeople(["Steve": LastName("Jobs")]))
最佳答案
在 Objective-C 中,字典的值不能为 nil。为了允许等价,有一个名为 NSNull 的类,它在非现代 Objective-C 中曾经被使用。
但在现代的 Objective-C/Swift 世界中,没有可选值的 names
将具有如下类型:
NSDictionary<NSString, LastName>*
NSDictionary 中的键和值类型不能被标记为可为空。如果您试图强制在 Objective-C 中访问 names
成员,例如:
@objc var names: [String: LastName?] = [:]
你会得到一个编译错误:
error: property cannot be marked @objc because its type cannot be represented in Objective-C
作为可行的解决方案,将名称类型更改为:
var names: [String: Any] = [:]
并使用 NSNull.null 作为没有值的占位符。老派,但它会起作用。
关于ios - swift - `NSUnknownKeyException` : calling `setValue:forKey` on NSObject with optional values in dictionary,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42362152/
Swift 中的 CKRecord 类规范说明使用 setObject:forKey: 来设置 CKRecord 的值。但是我看到了很多带有 setValue:forKey: 的代码示例,它是 NSV
我使用 let userDefaults = UserDefaults.standard 设置了一些用户默认值,当我检索它们时,我可以使用以下任何一个: jobTextField.text = use
我正在尝试设置 NSMutableDictionary 深处的对象,我的意思是在我可以到达它们之前有几个级别的键。 显然我做不到 setObject:x forKey forKey forKey fo
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: Where's the difference between setObject:forKey: and s
在查看文档时,我几乎看不出有什么大的不同。 “值”和“对象”都是 id 类型,因此可以是任何对象。 Key 曾经是一个字符串,在另一种情况下是一个 id。其中一个似乎保留了该对象,而另一个则没有。还有
由于 forKey 的值是 NSString,我在 Apple 文档中哪里可以找到所有可能值的完整列表?谢谢 最佳答案 方法 addAnimation:forKey: 并没有按照您的想法进行操作。 第
由于UIView动画是由CAAnimation支持的,所以我猜,当id执行UIView animateWithDuration:animations时,CALayer的addAnimation:for
我确信我在尝试编写的一个简单 iPhone 程序中遗漏了一些明显的东西,但代码看起来非常基本,我看不出有什么问题。 我正在尝试使用 NSMutableDictionary 来存储类列表及其关联的保存文
如果我使用dictionaryWithObjects:forKeys:,并且我的键数组恰好有重复项,会发生什么?我认为重复键的最后一个实例将是与该键关联的值;这是正确的吗? 最佳答案 The docs
我在控制台中遇到此崩溃: 2011-08-27 23:26:45.041 App[1672:3117] *** Terminating app due to uncaught exception 'N
This question already has answers here: Swift equivalent to `[NSDictionary initWithObjects: forKeys:
在我的项目中,我创建了一个包含对象和键的字典我为对象和键创建 NSArray 但是当我尝试创建字典时它会发送以下错误: * Terminating app due to uncaught except
这个问题在这里已经有了答案: Sort array into dictionary (5 个答案) 关闭 7 年前。 我有一个名为 animals 的 NSMutableArray。我需要创建一个
我对(例如)UIView 上的setValue:forKey 方法有疑问。 我有以下代码: let label = UILabel() label.layoutMargins = UIEdgeInse
在更改某些 UILabel 的框架时,我有一个神秘的 EXC_BAD_ACCESS。崩溃是随机的,通常我必须重复几分钟的条件。 启用 NSZombies 以及其他内存调试标志(NSDebugEnabl
在 Swift 中不可能使用 .setValue(..., forKey: ...) Int 之类的可空类型字段? 具有 enum 类型的属性 可空对象数组,如 [MyObject?] 对此有一种解决
我尝试使用函数 -setValue:forKey: 并使用 -valueForKey: 获取值 示例: NSArray *rootarr = [[NSArray alloc] init]; NSArr
我很好奇下面的代码片段中的 setValue:forKey: 发生了什么:它只是将指针设置为指向每个数组,类似于... [self setMyArray_1: animalArray]; [self
我的代码给出了一个错误提示 No visible interface for 'NSMutableDictionary' declares the selector 'addObjects:forKe
轨迹是这样的 Application received signal SIGSEGV Stack trace: #0 CoreFoundation 002B
我是一名优秀的程序员,十分优秀!