Ios 为什么可以';我不能从AppDelegate调用对象方法吗?选择器没有已知的类方法
我有一个类似于单例的Ios 为什么可以';我不能从AppDelegate调用对象方法吗?选择器没有已知的类方法,ios,objective-c,Ios,Objective C,我有一个类似于单例的DataHandler类,它有sharedHandler对象方法。我在整个项目中都使用它,但由于某些原因,我不能在AppDelegate中使用它 DataHandler.h #import <Foundation/Foundation.h> @interface DataHandler : NSObject + (id)sharedHandler; - (void)logout; @end AppDelegate.m
DataHandler
类,它有sharedHandler
对象方法。我在整个项目中都使用它,但由于某些原因,我不能在AppDelegate中使用它
DataHandler.h
#import <Foundation/Foundation.h>
@interface DataHandler : NSObject
+ (id)sharedHandler;
- (void)logout;
@end
AppDelegate.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
#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
的文件,而AppDelegate.m
中的导入拾取了错误的文件。请注意,它可能正在拾取一个实际上不在您的项目中的文件,只要它位于磁盘上的文件夹中。您没有两个名为DataHandler.h
的文件,是吗?我无法重现此问题。确保在DataHandler.m
上设置了正确的目标成员身份。另外,在创建singleton时使用dispatch_一次:Target设置得很好,就像我说的,我在项目中的任何地方都使用这个类,只要从AppDelegate中删除它,项目的构建和工作都会很好@凯文巴拉德你是对的。。。更新git后,我的项目根目录中出现了两个模板文件DataHandler.h&.m,它们没有添加到项目导航器中,因此我没有看到它们。我用Finder搜索它,它出现了。。。我不会猜到的:谢谢你,凯文,事情就是这样。我没有在AppCode中看到该文件,因为它在项目子目录中存储的其他类中工作,所以我没有预料到原因。