web-dev-qa-db-ja.com

Xcodeメモリ警告-Objective-Cクラス情報を読み込めませんでした

FacebookとParseでユーザーをログに記録しているときに、古いiPhone4でのみこのエラーが発生します。シミュレーターで実行すると、このエラーは発生しません。

それが起こったとき、アプリはメモリから21.2MBしか取りませんでした。これは、私のテスト4で使用可能なメモリの4.2%にすぎません。

このバグを修正するためにどこから始めればよいのかよくわかりません。正直に言うと完全に失われました。

2015-11-12 08:09:27.647 APPNAME [3883:426582]メモリ警告を受け取りました。警告:Objective-Cクラス情報を読み込めませんでした。これにより、利用可能な型情報の品質が大幅に低下します。 (lldb)

質問の一部の更新ですが、それでも重複していると思われる場合は削除します。レプリカとして提案した質問は、実際には問題の解決に役立ちません。

同時に発生するクエリの数を減らし、Parseを使用することで、エラーを部分的に取り除くことができました。最初の起動を取得して新しいユーザーをサインアップするためのアプリは、次のことを行う必要があります。

  • facebookでログに記録する
  • facebookのグラフデータを照会する
  • facebookのグラフデータを解析ユーザーに追加します
  • レピュテーションテーブルを作成し、関連付ける
  • メイン画面を起動
  • レピュテーションのクエリ
  • 利用規約の問い合わせ
  • チュートリアルのステータスを照会する

最後の2つを削除することで、アプリの使用の最初の数秒で警告が消える可能性があります。そして、アプリを操作せずに10分間実行すると、警告/エラーが発生します。

それは、バックグラウンドで同時に多くのクエリが発生している場合、このタイプのメモリ警告を引き起こす可能性があると思いますか?または、他の質問が示唆しているように、これは純粋にXcodeのバグですか?

9
GuiSoySauce

Cocoa(OS X)アプリのビルド中にこの警告が発生しました。しかし、どうやらそれはiOSアプリにも起こります。

warning: could not load any Objective-C class information. This will significantly reduce the quality of type information available

この警告により、Xcode7.3.1はサードパーティライブラリ-SwifyJSON内のコード行に移動しました。しかし、警告が発生するまでは非常にうまく機能していたため、これはサードパーティのライブラリとはまったく関係がないことを私は知っていました。

いくつかのカスタムビュー(そしてもちろんコントローラー)を持つTabViewControllerを備えたMainViewControllerがありました

2番目のカスタムクラスのインスタンスを設定した直後に、それらの間でデータを渡すために警告が発生しました。

MainVCでは、私のコードは

private var firstTabVC = FirstTabVC
var jsonInfo:JsonInfoClass  = JsonInfoClass
private var secondTabVC = SecondTabVC // waring had occured after this was added

Xcodeは、「jsonInfo」インスタンス行が「secondTabVC」インスタンス行の真上にある場合にのみ、サードパーティライブラリに移動しました。 (JsonInfoClassは、サードパーティライブラリでJSONデータを処理するカスタムクラスです)

問題のあるコード行を「firstTabVC」行のすぐ下に移動しました。その後、Xcodeは「Objective-Cクラスのロード」という文句を言うのをやめました。 'firstTabVC'行で「EXC_BAD_ACCESS」エラーのみが発生しました。これは、Xcodeが言ったことを信じないようになった場所です。

そこで、SecondTabVCカスタムクラスに移動すると、MainVC.swftのインスタンスを次のように宣言していることがわかりました(とにかくなぜこれが好きなのかわかりませんでした)。

var mainVC:MainViewController = MainViewController()

mainVCから次のようにデータを渡すことができるように、「self」(MainVC)を設定します。

override func prepareForSegue(segue: NSStoryboardSegue, sender: AnyObject?) {
    .
    ..
    secondTabVC.mainVC = self
    ....
}

secondTabVC.swifの宣言をに変更した後

 var mainVC: MainViewController!

警告はなくなり、正常に機能しました。これが誰かに役立つことを願っています。

1
Kyle KIM