NSMutableDictionnary的内容不规律地返回

时间:2015-03-12 22:17:01

标签: cocoa nsdictionary nsmutabledictionary

我正在尝试在Objective-C中的词典中添加键。代码如下:

我有一个MyClass类,其头文件包含:

@property (nonatomic) NSMutableDictionary *dict;

初始化如下:

_dict = [[NSMutableDictionary alloc] init];

然后我尝试添加密钥:

- (void) addOrModify:(myKey*) key withValue:(myValue *) value {
[self.dict setObject:value forKey:key];
NSLog(@"Adding the key %@ %p with value %@ %p",[key description],key,[value description],value);
NSLog(@"%@",[self.dict description]);
}

以下是我添加不同键/值的原因:

Adding the key (key1) 0x7f9dc3590070 with value (value1) 0x7f9dc358e760
{
"(key1)" = "(value1)";
}

Adding the key (key2) 0x7f9dc357adc0 with value (value2) 0x7f9dc357de20
{
"(key2)" = (null);
"(key1)" = "(value1)";
}

Adding the key (key3) 0x7fa4d2cbdbd0 with value (value3) 0x7fa4d2d53cf0
{
"(key3)" = "(value3)";
"(key2)" = "(value2)";
"(key1)" = "(value1)";
}

现在,如果我使用XCode的调试器查看字典的实际内容,我发现所有对键/值都应该存在。所以似乎dict的描述方法无法正确打印某些键的值。在不使用NSLog但在UITable中显示字典内容的情况下也是如此。另请注意,如果我尝试记录这些特定键的值的地址,它也会给我0x0(因此我的描述函数没有错误)。

请注意,行为相当混乱,有时几个值设置为nil,然后在我添加几对键/值后它们会正确显示。我真的无法理解这个问题,任何帮助都会非常感激。

修改1

我的按键界面

@interface myKey : NSObject <NSCopying>
@property(nonatomic, copy) NSString *myKeyName;
@property(nonatomic) float myKeyFloat;
@property(nonatomic, readonly, strong) NSDate *dateCreated;

我的价值观界面:

typedef NS_ENUM(NSInteger, Unities) { g, kg, };
@interface myValue : NSObject
@property(nonatomic) float myValueFloat;
@property(nonatomic) Unities myValueUnit;

致电代码

- (IBAction)addKeyValue:(id)sender { 
myValue *value = [myValue randomValue]; 
myKey *key =[[CatalogKeys sharedCatalogKeys] 
getRandomKeyFromStore]; [self.dict addOrModify:key withValue: value]; 
}

其中randomValue只是将myValueUnit设置为'g'并在myValueFloat中放置一个随机浮点数

1 个答案:

答案 0 :(得分:1)

这是一个猜测:

所提供的信息并未表明您的类型myKey实施了isEqual:hash。密钥必须实现这些方法才能在NSDictionary中正常工作;如果它们未实现,则将使用默认的NSObject实现,并且它们可能无法为myKey的实例生成正确的结果。

您还指出,使用description个实例的myKey确实有效,这是有道理的,因为description会返回NSString,并且该类型会实现isEqual:hash

HTH