2017-09-05 10 views
1

私はDataHandlerクラスを持っています。これはシングルトンのように動作し、sharedHandlerオブジェクトメソッドを持っています。私はプロジェクト全体を通してそれを使用していますが、何らかの理由でAppDelegateで使用できません。AppDelegateからオブジェクトメソッドを呼び出すことができないのはなぜですか?セレクタの既知のクラスメソッドがありません

DataHandler.h

#import <Foundation/Foundation.h> 

    @interface DataHandler : NSObject 

    + (id)sharedHandler; 
    - (void)logout; 
    @end 

DataHandler.m

#import "DataHandler.h" 

/** 
* Singleton static method 
* @return singleton instance 
*/ 
+ (id)sharedHandler { 
    static DataHandler *sharedHandler = nil; 
    @synchronized (self) { 
     if (sharedHandler == nil) 
      sharedHandler = [[self alloc] init]; 
    } 
    return sharedHandler; 
} 

-(void) logout { 
    // ... 
} 


@end 

AppDelegate.m私は入れません

#import "AppDelegate.h" 
#import "DataHandler.h" 

@implementation AppDelegate { 

- (void)applicationWillResignActive:(UIApplication *)application { 
    [[DataHandler sharedHandler] logout]; 
} 

@end 

この現象の原因は何ですか?

+0

「DataHandler.h」という名前のファイルは2つありません。 –

+0

この問題は再現できません。正しいターゲットメンバーシップが 'DataHandler.m'に設定されていることを確認してください。また、シングルトンを作成するときは、代わりにdispatch_onceを使用してください:http://blog.bjhomer.com/2011/09/synchronized-vs-dispatchonce.html – JAL

+0

ターゲットはうまく設定されています。私が言ったように、私はこのクラスをプロジェクトのどこでも使用します。 AppDelegateから削除するだけで、プロジェクトを構築して正常に動作させることができます。 @KevinBallardあなたは正しいです...私はgit 2つのテンプレートファイルを更新した後DataHandler .h&.mプロジェクトのナビゲータに追加されていない私のプロジェクトのルートディレクトリに表示され、私はそれらを見ていない。私はFinderを使って検索しましたが、現れました...私はそれを推測しませんでした:/ありがとうございます – Krystian

答えて

3

DataHandler.hという名前の2つのファイルがあり、AppDelegate.mのインポートで間違ったファイルが選択されています。ディスク上のフォルダ内にある限り、プロジェクトに実際にはないファイルを取得している可能性があります。

+0

ケビン、ありがとうございました。私はAppCodeでファイルを見なかったし、プロジェクトのサブディレクトリに格納されている他のクラスでも働いていたので、私はその原因を予期しなかった。 – Krystian

関連する問題