IOS 13ベータ版でアプリをテストしようとしています。ようこそ画面のボタンをタップして別の画面に切り替えると、アプリがフリーズして終了します。 Xcode 11でデバッグすると、コンソールに次の警告行が表示されます。
[フレームワーク] CoreUI:RunTimeThemeRefForBundleIdentifierAndName()は、IDが「(null)」のアセットのAssets.carを見つけることができませんでした
[フレームワーク] CoreUI:RunTimeThemeRefForBundleIdentifierAndName()は、IDが「(null)」のアセットのAssets.carを見つけることができませんでした
そして数秒後、アプリはログエントリで終了します:
デバッガーからのメッセージ:メモリの問題により終了しました
IOS 12ではそのような問題はありません。いくつかのアセットファイルを使用して簡単なテストアプリを作成し、ボタンタップのセグエが正常に機能しました。また、ターゲットバージョンをiOS 13に変更し、バンドルIDを変更し、クリーンアップして再構築しましたが、問題は引き続き発生します。
問題は関連していないことがわかりました
CoreUI:RunTimeThemeRefForBundleIdentifierAndName()は、識別子が「(null)」のAssets.carをバンドル内に見つけることができませんでした
ターゲット画面でカスタムUILabelが使用されました。アプリのフリーズとメモリの問題の根本的な原因は、メソッド間の再入可能なループでした
override var text: String? {
didSet {
guard let text = text else { return }
let textRange = NSMakeRange(0, text.count)
// Kern attribute needed to do letter spacing over text
let attributedText = NSMutableAttributedString(string: text)
attributedText.addAttribute(NSAttributedStringKey.kern , value: 2.0, range: textRange)
// Add other attributes if needed
self.attributedText = attributedText
}
}
そして
override public func layoutSubviews() {
super.layoutSubviews()
if let text = self.text {
self.text = text.uppercased()
}
}
おそらく、新しいSDKバージョンは、attributedText
フィールドが変更されたときに、layoutSubviews()を呼び出します。