【问题标题】:UTF8String problemUTF8String 问题
【发布时间】:2011-09-12 08:13:54
【问题描述】:

我遇到了这个UTF8String 的奇怪问题:

parentMode = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];
…
if(parentMode != @"Sleep")
{   
    NSLog(@"%s", [parentMode UTF8String]);      
}

我的问题是:

  1. 为什么我必须进行此转换才能登录parentMode

  2. 日志正在打印Sleep。那么,如果无论如何都完成了,那该怎么做呢?

【问题讨论】:

  • 很简单,为什么日志显示 Sleep ?如果它的睡眠,if语句不正确,应该有一个日志..

标签: objective-c cocoa nslog


【解决方案1】:

您不能使用普通的关系运算符比较字符串,您必须使用:

if (![parentMode isEqualToString:@"Sleep"])
{
    NSLog (@"%@", parentMode);
}

但是,在使用该方法之前,您可能需要检查 parentMode 是否不是 nil。您不需要使用UTF8String 方法,您可以使用%@ 格式说明符直接记录字符串。如果这不起作用,那么您提供的代码中遗漏了一些非常重要的内容。

【讨论】:

    【解决方案2】:

    要记录字符串,你可以写:

     NSLog(@"%@", parentMode);
    

    使用 %@ 占位符,无需将其转换回 UTF-8。

    这可能也解释了为什么 if 语句有效。

    更新:

    你应该将字符串与isEqualToString:进行比较

    [parentMode isEqualToString: @"Sleep"]
    

    【讨论】:

    • 不正确。如果我一直用@ 登录它的崩溃。我已经尝试了很多方法。另一件事是,如果值为 sleep ,为什么要设置 if 条件???
    • 您的字符串比较不正确。您应该使用 isEqualToString: 来比较字符串。它不应该与 @"%@" 格式字符串一起崩溃。如果是这样,问题就出在其他地方。
    【解决方案3】:

    如果您要比较整数,那么您必须使用您在帖子中使用的语法。但是当您比较字符串时,请使用它。

    if (![parentMode isEqualToString:@"Sleep"])
    {
        NSLog (@"%@", parentMode);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多