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

时间:2013-10-01 08:08:00

标签: 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 no location, it may have been optimized out
Errored out in Execute, couldn't PrepareToExecuteJITExpression

以下是代码:

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

4 个答案:

答案 0 :(得分:80)

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

您必须将编译器优化级别从Fastest,Smallest更改为none

  • 转到目标构建设置
  • 搜索优化级别
  • 将其更改为none(无论您处于何种模式,即调试,分发或发布)
  • 利润

为您的项目设置执行相同的操作

答案 1 :(得分:38)

确保您处于调试模式。转到修改计划> 构建配置>调试

答案 2 :(得分:9)

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

答案 3 :(得分:3)

一个替代答案:而不是修复"它可能已被优化"通过删除优化,您可以通过使用变量来阻止优化。

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

NSString *stringValue = [[self.responseArray objectAtIndex:i] valueForKey:@"merchant_name"]; 
NSLog(@"%@", stringValue);

stringValue将不再优化,因为您正在使用它。

如果要在项目中查看优化输出变量的所有实例,请使用产品 - > 分析以分析您的项目。任何"死店"如果打开了编译器优化,则会在编译时优化警告(其中存储值,从不读取)。