ARC [重复]不允许将非Objective-C指针类型'SEL'隐式转换为'NSString * _Nonnull'

问题描述 投票:-3回答:1

这个问题在这里已有答案:

我读了5个其他相关的questions有相同的错误或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?的重复

ios objective-c xcode selector
1个回答
2
投票

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

看起来你想将getDBFile的返回值传递给fileExistsAtPath:,而不是getDBFile的选择器。

如果是这样,只需调用getDBFile而不是选择它的选择器:

BOOL isDatabaseInCache = [fileManager fileExistsAtPath:[self getDBFile]];
© www.soinside.com 2019 - 2024. All rights reserved.