2016-03-30 19 views
21

この関数は、実行時エラーで失敗した失敗:デバッグビュー階層は

-[UIWindow viewForFirstBaselineLayout]: unrecognized selector sent to instance 0x7fb9dae257d0 

誰もが同じに遭遇しましたか?

UPD:
シミュレータのiOS 8.1/8.4に失敗します。 9.3はうまく動作します。

UPD2: UIWindowが同じように作成されます。

window = UIWindow(frame: UIScreen.mainScreen().bounds)  
window?.rootViewController = RootViewController.rootVC 
window?.makeKeyAndVisible() 
+0

「UIWindow」とはどういう取引ですか? – holex

+0

全く契約はありません。ユーザーインターフェイスインスペクタは単独で失敗します。 – orkenstein

+0

私は解決策を探して、今同じ問題に直面しています – Jagie

答えて

21

私は私のプロジェクトで、次の修正を配置することによって、再び作業ビューデバッガを得た:

#ifdef DEBUG 

#import <UIKit/UIKit.h> 
#import <objc/runtime.h> 

@implementation UIView (FixViewDebugging) 

+ (void)load 
{ 
    Method original = class_getInstanceMethod(self, @selector(viewForBaselineLayout)); 
    class_addMethod(self, @selector(viewForFirstBaselineLayout), method_getImplementation(original), method_getTypeEncoding(original)); 
    class_addMethod(self, @selector(viewForLastBaselineLayout), method_getImplementation(original), method_getTypeEncoding(original)); 
} 

@end 

#endif 

プロジェクトのロード、load方法は、彼らがある場合viewForBaselineLayout実装を使用するviewForFirstBaselineLayoutviewForLastBaselineLayoutを引き起こし、実行されます現在実装されていないので、ビューのデバッグでは、iOS8が探していた動作に味がつくようになります。

これを自分のプロジェクトに追加するには、プロジェクトに新しい空のObjective-Cファイルを作成し、その中に内容を貼り付けます。名前は任意です。私は私の "UIView + FixViewDebugging"と呼んでいます。あなたが純粋なSwiftプロジェクトにいる場合、はブリッジヘッダーを作成する必要はありません。ファイルはプロジェクトにコンパイルされ、参照する必要はありません。

これは、#ifdef DEBUGのためにデバッグビルドでのみ機能することに注意してください。それを削除することはできますが、誤ってこれをリリースビルドにコンパイルすることができます(悪影響はありません)。この方法がこれらの行で動作しない場合は、ビルド設定> Apple LLVM - 前処理>プリプロセッサマクロ>デバッグでターゲットがDEBUG=1であることを確認してください。

+2

9.3(13E230)シミュレータでさえ、上記のようなスウィズリングの有無にかかわらず、Xcode 7.3.1(7D1014)では依然として壊れています。 – verec

+0

XCode 7.3.1で働いた – Division

+0

私はXCode 7.3.1、iPhone 6s iOS 9.3.2では動作しませんでした。 –

21

は、Xcodeの7.3のように見えるUIを描画するためにviewForFirstBaselineLayoutプロパティを使用しています。しかし、このプロパティはiOS 9.0から利用可能とマークされています。

Screenshot of UIView.h

[UIView viewForFirstBaselineLayout]方法は、IOSの9.0の前のバージョンのために使用されるべきです。アップルからの人はこの事件を考慮しなかったようだ。

+0

これは間違いなく、iOS 8のシミュレータに切り替えると、エラーが発生し、iOS 9に戻って、それ以上のエラーは表示されなくなりました。 – bubuxu

0

はい。デバッグビューの階層ボタンをクリックすると、ページに何も表示されず、 "[UIWindow viewForFirstBaselineLayout]:インスタンス0x7fb9dae257d0に送られたセレクタが認識されません"というメッセージが表示されます。

これを解決するには、iOS 9.0以下のiOSシステムを使用していることを確認してください。まだその機能を自由に使用します。