【问题标题】:_BSMachError while running Stanford's CS193p Smashtag app_BSMachError 在运行斯坦福的 CS193p Smashtag 应用程序时
【发布时间】:2015-10-13 16:56:19
【问题描述】:

我从course's site 下载了 Smasthag 演示应用程序。项目构建良好(在 Twitter、TwitterRequest 等类的小改动之后,因为我使用最新的 Xcode 7b4)并且在模拟器上运行良好(我还必须将 NSAppTransportSecurity 键添加到 info.plist),但不是在设备上 -它不获取推文。我在带有 iOS 9 Public Beta 的 iPhone 6 和带有 iOS 8.4 的 iPad 2 上测试了它。此外,当应用程序在模拟器中运行并且我将主题标签更改为搜索时,整个 tableView 会重新加载新的推文,但在控制台中我得到了这个:

2015-07-23 03:24:15.560 Smashtag[25991:4344251] _BSMachError: (os/kern) invalid capability (20)
2015-07-23 03:24:15.560 Smashtag[25991:4344251] _BSMachError: (os/kern) invalid name (15)

应用程序仍然可以正常运行,但这个错误让我很烦。我对谷歌中的这个 _BSMachError 无能为力(只有一条孤独的印尼推文)。我也不明白为什么应用不能在设备上获取推文。

【问题讨论】:

  • 所以我发现了为什么应用程序没有在设备上获取推文。实际上它正在获取推文,但无法将它们转换为其内部数据结构。问题出在 Twitter class= asTwitterDate 提供的字符串扩展中。它使用NSDateFormatter 从字符串中获取日期。扩展隐含地假设格式化程序语言环境是英语(对于模拟器来说是正确的),而我的设备语言环境是波兰语。将代码中的语言环境显式设置为英语解决了该问题。
  • 你是对的。在 Tweet.swift 中更改语言环境解决了这个问题。谢谢!发布代码来解决这个问题。

标签: ios swift cs193p


【解决方案1】:

我从系统键盘切换到自定义键盘后遇到同样的问题。但是它不影响我的应用程序运行。

【讨论】:

  • 我将 textField 的键盘设置为 Twitter 键盘,但将其更改为默认键盘后,错误仍然存​​在。
【解决方案2】:

您需要将 NSAppTransportSecurity 添加为字典,并且第一个子项应该是一个名为 NSAllowsArbitraryLoads 的布尔值,设置为 YES。请注意,这会退出 NSAppTransportSecurity 功能。

在此处查看应用传输安全配置说明。请注意,如果您想完全退出,此文档是全新的并且其中有错误。错误是 NSAllowsArbitraryLoads 键未显示为​​ NSAppTransportSecurity 的直接子项。

理想情况下,您应该设置适当的列入白名单的域和安全设置。

https://developer.apple.com/library/prerelease/ios/technotes/App-Transport-Security-Technote/index.html

【讨论】:

  • 我有,我在问题中提到过。
  • 啊,对不起。实际上我这么说是因为 Apple 关于 NSAppTransportSecurity 的文档错误地显示了 plist 层次结构。 allow NSAllowsArbitraryLoads 键在技术说明中比预期的要深一层。当我观看他的 WWDC 视频时,我才意识到。我也遇到了这些错误,直到我适当地改变了它。也许这只是一个巧合。 developer.apple.com/library/prerelease/ios/technotes/…
【解决方案3】:

这似乎是一个 iOS 9 Beta 错误。它肯定与 UIKeyboard (系统之一)的呈现和解雇有关。而且,它不会一直发生。

它是无害的,只是烦人。该错误可能会在下一个测试版中得到解决,因为它位于核心系统对象中。

【讨论】:

  • 我收到此消息,它与键盘无关。它发生在旋转 iOS 9 模拟器时。而且我在 iOS 9 或 XCode 7 上都没有处于测试阶段。所以他们可能至少需要一年的时间才能解决这个问题。
  • 我回顾了我的代码,发现它确实发生在关闭键盘期间。
【解决方案4】:

要解决此问题,您应该将语言环境设置为 en_US。

将 Tweet.swift 中的私有扩展 asTwitterDate 更改为以下内容,以解决非 en_US 设备上的问题。

...
private extension String {
  var asTwitterDate: NSDate? {
    get {
        let dateFormatter = NSDateFormatter()
        dateFormatter.dateFormat = "EEE MMM dd HH:mm:ss Z yyyy"
        dateFormatter.locale = NSLocale(localeIdentifier: "en_US")
        let createdAt = dateFormatter.dateFromString(self)
        return createdAt
    }
  }
}

在此之后,您的应用程序应正确加载并显示所有数据。

【讨论】:

    【解决方案5】:

    如果该控件中的任何组件有任何不透明属性,只需删除它并使用隐藏属性。

    例子:

    //invisibleTextView.alpha = 0.0f;
    invisibleTextView.hidden = YES;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-13
      • 1970-01-01
      • 2019-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-20
      相关资源
      最近更新 更多