隐式转换非Objective-C指针类型' SEL'到#NSString * _Nonnull' ARC不允许

时间:2016-04-25 17:19:42

标签: ios objective-c xcode selector

我使用相同的错误或questions阅读了其他5个相关的syntax。据我所知,没有任何与我的问题相关的内容。

-(void) createCopyOfDBIfNeeded{
    NSFileManager *fileManager= [NSFileManager defaultManager];

    BOOL isDatabaseInCache = [fileManager fileExistsAtPath:@selector(getDBFile)];

    if (isDatabaseInCache) {
        return;
    }
}

// getDBFile方法:

-(NSString *) getDBFile {
    NSArray * paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
    NSString * DBPath = [paths firstObject];
    NSString * DBFile = [DBPath stringByAppendingPathComponent:@"productDBFile.db"];
    return DBFile;

}

似乎错误与@selector(getDBFile)有关。 如果我使用[self getDBFile]而不是一切正常,但我想学习如何以及在哪里适当地使用@selector以及错误/警告在这里意味着什么。

我也收到警告:Incompatible pointer types sending 'SEL' to parameter of type

编辑:这个问题基本上是What's the difference between a method and a selector?的重复

1 个答案:

答案 0 :(得分:2)

您只能将选择器传递给带选择器的方法。 fileExistsAtPath:需要NSString *,而不是SEL

您希望将getDBFile的返回值传递给fileExistsAtPath:,而不是getDBFile的选择器。

如果是这样,请拨打getDBFile而不是选择其选择器:

BOOL isDatabaseInCache = [fileManager fileExistsAtPath:[self getDBFile]];