当我在Xcode的断点停止时,我可以看到NSString变量的值。我怎样才能改变它们?我可以更改int或double变量,但不能更改NSString。
答案 0 :(得分:82)
您可以在调试控制台中执行此操作。假设你有NSString* myVar
。在控制台中,在(gdb)
之后,键入set myVar = @"My new string"
。如果您使用(lldb)
,请改用等效表达式expr myVar = @"My new string"
。
这可能无法在变量面板中正确显示,但您可以通过在控制台中输入po myVar
来验证该值。您的代码应该获取新值。
有关使用expr
的一些重要信息,请查看this StackOverflow post.
答案 1 :(得分:7)
您可以但必须从调试器命令提示符调用代码。 例如,假设您在此行之后有一个断点:
NSString *myString = @"My current string";
然后在(gdb)提示符下键入:
call myString = @"My new string"
您可以在更改字符串之前po myString
更改字符串以确认其已更改。
另一个例子:假设您想要更改视图控制器的标题。你可以使用setter。 *注意:调试器命令行不支持点表示法。例如,让视图加载,然后在视图控制器的生命周期内的某处设置断点。然后这样做:
call (id)[self setTitle:@"New Title"]
继续运行程序,您应该会看到视图控制器的标题更新。
答案 2 :(得分:2)
对于NSError,我使用的是:
(lldb) expression aTempError = (NSError*)[[NSError alloc] initWithDomain:@"MANO" code:1 userInfo:nil]
答案 3 :(得分:1)
(https://stackoverflow.com/users/1202867/n8tr)n8tr上面的评论显示了如何做到这一点。您只需在作业之前使用" po"像这样:po myString = @" my_new_string"和po self.title = @"新标题"。