objective-c - 带有 NSMutableDictionary (Objective-C) 的对象键

标签 objective-c nsdictionary key-value

我想存储一堆键值对,键是我自己继承自NSObject的对象(ObjectA),值是一个int。
我正在尝试使用 NSMutableDictionary。我知道你只能在字典中存储对象类型,所以我有以下内容:

id value = [NSNumber numberWithInt:my_number];

[[self dictionary] setObject:value forKey:myObjectA];

现在这给了我一个错误,说

-[ObjectA copyWithZone:]: unrecognized selector sent to instance

很好,我知道对象键需要实现 NSCopying 协议(protocol)。然而,我后来读到你可以通过使用 NSValue 包装你的对象来做到这一点。

有人可以解释一下我将如何包装我的对象,然后我如何通过键找到值吗?我仍然可以使用 dictionary objectForKey:myObjectA 还是在我搜索时也必须用 NSValue 对象包装 myObjectA?或者我应该在自定义类上实现 NSCopying,还是改用字符串键?

我正在寻找使用字典的最简单方法,如果必须的话,我会实现一个字符串键并使用 setValue:forKey: 代替,但如果可以的话,我宁愿使用对象键。

最佳答案

字典键总是被复制。所以你只需要实现 NSCopying类的协议(protocol),它只是 copyWithZone: 方法。

此外,您应该为您的类实现 isEqual: 方法。

编辑:如何实现您的copyWithZone: 取决于许多因素(主要因素:深拷贝与浅拷贝)。参见 Apple 的 Implementing Object Copy指南和this SO answer .

关于objective-c - 带有 NSMutableDictionary (Objective-C) 的对象键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6106662/

相关文章:

ios - 我的 UIPopoverBackgroundView 子类无法访问 UIPopoverBackgroundView 的实例变量

iphone - 如何在 Objective c 中为 iphone 创建一个字符串数组

ios - 如何向下转换为 [String : String] in a for in loop?

javascript - 拿一把 key :Object pair and append to another object in javascript

python - 检查字典中键内的键

excel - 从 MS Excel 访问 Redis?

objective-c - 如何在不覆盖 objective-c 的情况下保存文本文件

iphone - 来自 View Controller 类中的某个类调用方法

ios - NSdictionary 作为数据类型

ios - 根据 NSDictionay 中的键对 NSDictionary 的 NSArray 进行分组