Objective c 通过lldb在NSMutableDictionary中设置对象时出错

Objective c 通过lldb在NSMutableDictionary中设置对象时出错,objective-c,lldb,Objective C,Lldb,调试时,我需要替换不可变字典中的值。 为此,我从immutable创建了一个可变字典,并尝试使用lldb命令为此设置一个值: po NSMutableDictionary *$tmp = [(NSDictionary *) immutableDict mutableCopy] po [$tmp setObject:@"object" forKey:@"key"] 但是lldb失败并出现错误: 错误:无法使用“NSString*”类型的右值初始化“id\u Nonnull”类型的参数 在此处将参

调试时,我需要替换不可变字典中的值。 为此,我从immutable创建了一个可变字典,并尝试使用
lldb
命令为此设置一个值:

po NSMutableDictionary *$tmp = [(NSDictionary *) immutableDict mutableCopy]
po [$tmp setObject:@"object" forKey:@"key"]
但是
lldb
失败并出现错误:

错误:无法使用“NSString*”类型的右值初始化“id\u Nonnull”类型的参数
在此处将参数传递给参数“aKey”

有人知道怎么解决吗?

Tyr这样

NSDictionary *dictTemp = [[NSDictionary alloc] initWithObjects:@[@"Value1",@"value2"] forKeys:@[@"Key1",@"Key2"]];
NSMutableDictionary *mutableDict = [[NSMutableDictionary alloc] initWithDictionary:dictTemp];
使用lldb进行输出

Printing description of mutableDict:
{
    Key1 = Value1;
    Key2 = value2;
}
(lldb) po [mutableDict setObject:@"Value3" forKey:@"Key3"]
(lldb) po mutableDict
{
    Key1 = Value1;
    Key2 = value2;
    Key3 = Value3;
}

(lldb) 

您应该使用以下脚本:

expression [mutableDict setValue:@"newObject" forKey:@"key"];
这是
setObject:forKey:
definition:

- (void)setObject:(ObjectType)anObject forKey:(KeyType <NSCopying>)aKey;
- (void)setValue:(nullable ObjectType)value forKey:(NSString *)key;

类的关键类型
NSString

如果在Xcode 10中遇到这种情况,调试器中似乎存在一个缺陷,有时(但并非总是)无法执行编译代码中忠实发生的必要类型强制。事实上,它并不总是发生,当它真的发生时,尤其令人不安,而且很少有关于它的文章

我不完全理解细节,但谢天谢地,有一个简单的解决办法。(至少每次我遇到它时它都对我有效。)只需将密钥类型转换为
id
,如下所示:

(lldb) expr check[(id)@"check_id"]= @"383027"
(NSTaggedPointerString *) $6 = 0xb0b97b49f6ae12f7 @"383027"

请告诉我们您是如何初始化immutableDict的?@Hiteshultaniya it initialize一些是在应用程序中的,我在断点上捕捉到的。好的,您能在immutableDict中添加什么吗?我不能用最新的Xcode 9让它失败。您使用的是什么版本的Xcode?@HiteshSultaniya字符串键和字符串值