【问题标题】:BOOL logs fine on simulator, but on iPhone logs numbers like 96, -32, etcBOOL 在模拟器上记录正常,但在 iPhone 上记录数字,如 96、-32 等
【发布时间】:2023-03-22 04:05:01
【问题描述】:

我正在开发一个应用程序,它显示从应用程序附带的列表中随机选择的俳句。用户可以将俳句标记为“最爱”(也可以取消标记)。模拟器一切正常,NSLog 将每个俳句的布尔属性 isFavorite 显示为 0 或 1。

但是当我在 iPhone 上运行应用程序时,NSLog 显示布尔属性有时为 0,有时为 1,有时为 96,有时为 -32,与用户是否真的喜欢俳句没有任何关联。我该如何解决这个问题?

EDIT:这是我正在使用的代码:

-(void)displayHaiku {
    [self.displayHaikuTextView removeFromSuperview];
    self.haiku = [[GHHaikuInstance alloc] init];
    NSLog(@"Is haiku favorite? %d",self.haiku.isFavorite); 

        //On simulator the above line always logs 0 or 1, correlated exactly with whether the haiku has been marked "favorite."  On iPhone it could be any number, and shows no correlation.

    //Code that displays haiku onscreen.
}

isFavorite 是在GHHaikuInstance 中声明和合成的 BOOL,但只有当用户将其标记为收藏时它才会设置为 1。 (换句话说——我没有明确地将其设置为 0;我只是使用默认值 0,直到用户将其更改为 1。)

【问题讨论】:

  • 你确定你用过 %d 吗?
  • 你用的是什么代码?
  • 刚刚添加了代码来澄清。
  • 而 isFavourite 被定义为....?
  • 已添加说明。谢谢,戴夫。

标签: ios objective-c iphone xcode boolean


【解决方案1】:

要记录BOOL 值,您可以使用字符串

NSLog(@"Is haiku favorite? %@", self.haiku.isFavorite ? @"YES" : @"NO"); 

【讨论】:

  • 嗯。好吧,这消除了奇怪的数字,但是 NSLog 给我“YES”还是“NO”仍然与isFavorite 的实际值无关。 :( 再说一遍——这只是在手机上。它在模拟器上运行良好。
  • 根据您的代码,您只需初始化GHHaikuInstance,因此日志必须为NO。 iPhone和模拟器有什么区别?您是否尝试过清除并重新安装应用程序?
【解决方案2】:

苹果推荐%hhd

你可以阅读更多关于format specifiers的信息。

【讨论】:

    【解决方案3】:

    请检查 Release 和 Debug 版本之间的区别 :))

    (检查“优化级别”设置。调试版本设置为无 [-O0],而发布版本设置为最快、最小 [-Os]。) - 所以...不同的浮点行为..

    您必须从

    更改您的语句/初始化方法
    BOOL isFavorite;
    

    BOOL isFavorite = NO;
    

    【讨论】:

      猜你喜欢
      • 2011-06-06
      • 2012-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-14
      • 2013-03-16
      • 1970-01-01
      相关资源
      最近更新 更多