【问题标题】:NSLog crashes with certain NSURL- iOS 9.2NSLog 在某些 NSURL-iOS 9.2 上崩溃
【发布时间】:2016-05-22 00:37:01
【问题描述】:

这是我的代码,发生崩溃的地方:-

let URL = NSURL(string: "http://files.parsetfss.com/fa80bc63-88d4-412d-a478-2451cffc92a9/tfss-1d2a321d-b02e-4745-a589-e31536f648df-XXXXX%20CAT15%2030.p0001.jpg")
NSLog("Loading page with URL: \(URL)")

应用程序因EXC_BAD_ACCESS 而崩溃

【问题讨论】:

  • @MartinR,我的错,我没有太注意。 URL 对我来说有点被截断。它正好在 %20 之前停止。

标签: ios iphone swift nsurl nslog


【解决方案1】:

NSLog()的第一个参数是一个格式字符串,包含 format specifiers(以 % 开头)由 以下变量参数列表。在您的情况下,%20C 是格式说明符,但是 没有提供匹配的参数。这会导致未定义的行为, 它可能会崩溃或产生不完整或错误的输出。

如果你想使用NSLog(),那么一般的安全方法是

NSLog("%@", "Loading page with URL: \(URL)")

在这种特殊情况下,

NSLog("Loading page with URL: %@", URL)

也可以,因为NSURLNSObject 的子类,可以使用 %@ 格式。

【讨论】:

  • 靶心!非常感谢马丁,不知道 %20C 是罪魁祸首;)
【解决方案2】:

你应该使用 println 而不是 NSLog。

let URL = NSURL(string: "http://files.parsetfss.com/fa80bc63-88d4-412d-a478-2451cffc92a9/tfss-1d2a321d-b02e-4745-a589-e31536f648df-XXXXX%20CAT15%2030.p0001.jpg")!
println("Loading page with URL: \(URL)")

我添加了选项标志!最后打开包装。

【讨论】:

  • 如果 OP 使用的是 Swift 2.0,println已被替换为print
  • 即使在 Swift 程序中也有充分的理由使用 NSLog。例如,从多个线程调用时不会产生垃圾输出,并且会打印时间戳。
  • 是吗?我仍在使用 println。它工作正常:-) 虽然感谢@Ollie 提供的信息
  • I am still using println. it works fine 因为您使用的是 Swift 1,而不是 Swift 2。
  • 请注意,NSLog 会出现在设备日志中,而print 不会。
猜你喜欢
  • 2016-03-29
  • 1970-01-01
  • 2015-04-23
  • 1970-01-01
  • 2017-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多