Ios 字符串值在目标C中始终显示为零

Ios 字符串值在目标C中始终显示为零,ios,objective-c,Ios,Objective C,我已经升级到Xcode 5.0。当我在调试模式下运行应用程序并尝试在控制台中打印NSString值时,它会给出以下错误。有什么想法吗 error: warning: couldn't get cmd pointer (substituting NULL): Couldn't load '_cmd' because its value couldn't be evaluated Couldn't materialize struct: the variable 'stringValue' has

我已经升级到Xcode 5.0。当我在调试模式下运行应用程序并尝试在控制台中打印
NSString
值时,它会给出以下错误。有什么想法吗

error: warning: couldn't get cmd pointer (substituting NULL): Couldn't load '_cmd' because its value couldn't be evaluated
Couldn't materialize struct: the variable 'stringValue' has no location, it may have been optimized out
Errored out in Execute, couldn't PrepareToExecuteJITExpression
代码如下:

NSString *stringValue = [[self.responseArray objectAtIndex:i] valueForKey:@"merchant_name"]; 

确保您处于调试模式。转到编辑方案生成配置>调试

错误消息中说明了原因:它可能已被优化。。这意味着您正在以优化的方式编译和运行代码

您必须将编译器优化级别从
最快、最小
更改为

  • 转到目标生成设置
  • 搜索优化级别
  • 将其更改为无(无论您处于ie调试、分发或发布的何种模式)
  • 利润

对项目设置执行相同的操作

您可能正在尝试在“发布方案”中调试。转到“产品/方案/编辑方案”,并在左侧面板中选择“运行”。然后将构建配置更改为“debug”。

一个备选答案:您可以通过使用变量来停止优化,而不是通过删除优化来修复“它可能已经优化了”

因此,在您的问题中,如果您使用
stringValue
执行某些操作:

NSString *stringValue = [[self.responseArray objectAtIndex:i] valueForKey:@"merchant_name"]; 
NSLog(@"%@", stringValue);
stringValue
将不再优化,因为您正在使用它


如果要查看项目中优化输出变量的所有实例,请使用产品->分析来分析项目。如果启用了编译器优化,任何“死区存储”警告(其中存储了一个值,并且从不读取)都将在编译时被优化掉。

能否显示正在调试的代码?NSString*stringValue=[[self.responseArray objectAtIndex:i]valueForKey:@“merchant_name”];当我试着打印po stringValue时,它给出了上面的错误“i”计数器是什么?您确定您的dic中有“商户名称”吗?尝试一些调试。是的,我尝试过,NSString得到了值。它只是没有在控制台
objectForKey
中显示值,而不是
valueForKey
,您能给我们:
NSLog(@“%@”,u responseArray)请?问题是它不会打印NsArray和其他值。只有在这种情况下,才会出现这种错误。此外,我在升级到Xcode5后遇到了这个错误。看起来是编译器错误。@Arun这不是编译器错误,只是编译器设置。。看我的回答,我也有同样的问题。更改编译器优化级别对我不起作用。该问题仅在尝试调试属于我的应用程序使用的库(该库包含在我的项目中并由我自己编译)的代码时出现。我在library项目、library目标、主应用程序项目和主应用程序目标中更改了优化设置,但运气不好。有很多方法可以实现这一点。对我来说,这是因为“其他C标志”值被设置为“-O2”,即使对于调试构建也是如此。为调试版本关闭此选项解决了此问题。@abbood谢谢。。这对我帮助很大,我只是想知道将优化级别更改为“无”会对性能产生影响。?@Tapasal当然会。。您希望生产计划达到最充分的优化级别