【问题标题】:NSString contents changes from orginal text during object creation [closed]NSString 包含对象创建期间原始文本的更改[关闭]
【发布时间】:2014-11-17 23:46:39
【问题描述】:

这是我看到的最好的简化案例

NSString * test = @"??( ";
NSLog(@"'%@'", test);

console> '['

我有一个解决办法

NSString * test = @"\x3f\x3f(";
NSLog(@"'%@",test);

console> '??('

这似乎是由 NSString 对象激活中的字符串插值或类似过程引起的。我发布这个问题有两个原因。

1) 有人碰巧知道这是什么原因造成的吗?
2) 我没有在 NSString 的这个“特性”上找到任何东西,我花了一个小时才找到这个错误,所以这只是未来程序员的面包屑。解决方法是使用字符的十六进制代码。

【问题讨论】:

  • 您使用的是什么版本的 Xcode?您正在为哪个 iOS 版本构建?
  • xcoode 6.1 ios6(但我在其他ios版本中见过)
  • 这真的很难诊断,因为它在 Xcode 6.1 / iOS 8 中无法重现。
  • 感觉这点主要是面包屑,我不会担心的。

标签: ios objective-c regex nsstring


【解决方案1】:

NSlog("'%@'", test); 在语法上不正确。出现这种语法错误,你是如何编译它的?

如果我把它改成NSLog(@"'%@'", test);,它可以正常工作(注意表示@的字符串文字和NSLog中的大写L)。

【讨论】:

  • remus 说真话(已投票)。 NSLog 期望和 NSString 文字作为它的第一个参数。这是一个以@ 符号为前缀的双引号字符串。只有双引号的字符串是 C 字符串,它是一个简单的以空字符结尾的字节数组。两者不可互换,您应该收到编译器警告。
  • 虽然这个说法是正确的(在我的例子中是错字)。它与实际问题无关。但是感谢您发现错字
  • @Nathan 真的很难说,因为做得好我无法重现你的问题......
猜你喜欢
  • 1970-01-01
  • 2019-01-03
  • 2012-10-25
  • 2018-05-28
  • 2015-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-21
相关资源
最近更新 更多