从-traitCollection返回nil,这在Xcode 11 Beta中是不允许的

时间:2019-09-16 02:00:22

标签: ios swift xcode

UITraitCollection中的断言失败* _Nonnull 从-traitCollection返回零,这是不允许的吗? 当我尝试在ios 13中运行Xcode 11 beta时,它崩溃了。我不知道怎么了。

3 个答案:

答案 0 :(得分:3)

这是iOS 13和Xcode 11处理主线程检查器不一致的方式。

基本上,您是从后台线程更新UI的。只要确保您要更新主线程中的所有UI。

只需将用于更新UI的代码包装在DispatchQueue.main.async { }中。

答案 1 :(得分:3)

我遇到了这个问题,因为我的代码库中经常被诅咒的一位未命名的先前编码人员没有在实现[super init](又称{{1} }或UITraitEnvironment)!

如果我能在五年后向后挥动战锤,我会的。

此实现在UIView的子类中……

UIViewController

已更新为…

UIViewController

并解决了我在Xcode 11 / iOS 13中开始收到的崩溃。

答案 2 :(得分:1)

只需将您的代码放入UI更新的主线程中即可:

const langData = [
  {
    name: "Front-End",
    children: [
      {
        name: "HTML"
      },
      {
        name: "CSS"
      },
      {
        name: "JS"
      }
    ]
  }
];
const renderName = ({ name, children }) => {
  console.log(name);
  return (
    <>
      <p>{name}</p>
      {children && children.forEach(newData => renderName(newData))}
    </>
  );
};

const App = () => {
  return <div className="App">{renderName(langData[0])}</div>;
};