我有一個類似單例的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'
這種行爲的原因是什麼?
您沒有兩個名爲'DataHandler.h'的文件,是嗎? –
我無法重現此問題。確保在'DataHandler.m'上設置了正確的目標成員資格。另外,使用dispatch_once代替創建單例時:http://blog.bjhomer.com/2011/09/synchronized-vs-dispatchonce.html – JAL
目標設置良好,就像我說過的,我在項目中隨處使用這個類,並從AppDelegate中刪除它使項目生成並正常工作。 @KevinBallard你是對的...在我更新了git兩個模板文件後,DataHandler.h和.m出現在我的項目的根目錄中,這些項目沒有添加到項目導航器中,所以我沒有看到它們。我用Finder搜索它,它出現了......我不會猜到它:/謝謝 – Krystian