2017-09-05 89 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 

我不斷收到:

Error: no known class method for selector 'sharedHandler` 
Error: no known instance method for selector 'logout' 

這種行爲的原因是什麼?

+0

您沒有兩個名爲'DataHandler.h'的文件,是嗎? –

+0

我無法重現此問題。確保在'DataHandler.m'上設置了正確的目標成員資格。另外,使用dispatch_once代替創建單例時:http://blog.bjhomer.com/2011/09/synchronized-vs-dispatchonce.html – JAL

+0

目標設置良好,就像我說過的,我在項目中隨處使用這個類,並從AppDelegate中刪除它使項目生成並正常工作。 @KevinBallard你是對的...在我更新了git兩個模板文件後,DataHandler.h和.m出現在我的項目的根目錄中,這些項目沒有添加到項目導航器中,所以我沒有看到它們。我用Finder搜索它,它出現了......我不會猜到它:/謝謝 – Krystian

回答

3

您有兩個文件名爲DataHandler.h,導入AppDelegate.m正在拾取錯誤的文件。請注意,它可能正在拾取實際上不在項目中的文件,只要它位於磁盤上的文件夾中即可。

+0

謝謝凱文,那正是發生了什麼事。我沒有在AppCode中看到該文件,並且因爲它在存儲在項目子目錄中的其他類中工作,所以我沒有預料到原因。 – Krystian

相關問題