ARC

2016-04-25 20 views
-3

で「SEL」から「NSString * _Nonnull」への非Objective-Cポインタ型の暗黙的な変換が許可されていません。他の5関連のquestionsも同じエラーまたはsyntaxを読み込んでいます。私が理解している限り、私の質問に関連するものは何もありませんでした。ARC

-(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

+4

あなたはこれを参照することもできます。https://developer.apple.com/library/mac/documentation/General/Conceptual/DevPedia -CocoaCore/Selector.html – jtbandes

+2

セレクタが何であるか分からず、関数の理解がほとんどなく、呼び出す方法がわからないようです。多分、良いObjective-Cプライマーが順番にあるでしょう。 – Avi

+1

@ asma22 Objective-Cのメソッドは、引数を介してリファレンスによって返すものの非常に特殊なパターンに従わない限り、決して 'get'という接頭辞を付けてはいけないことに注意してください。 (混乱の共通点 - 言語を歓迎して楽しい!) – bbum

答えて

2

は、私はまた、警告が表示されます。 fileExistsAtPath:は、ではなく、NSString *です。

戻り値getDBFilegetDBFileのセレクタではなくfileExistsAtPath:に渡したいようです。

ので、ちょうどgetDBFileを呼び出す代わりに、そのセレクタを取った場合:

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

あなたの最初の行について詳しく調べることができます、私は文字列を返す' SEL'を渡しています。あなたは 'performSelector'入力オプションのようなものを受け入れることができなければなりませんか?メソッドがそれを受け入れるかどうかは、どうすればわかりますか? – Honey

+0

@ asma22メソッドの結果を期待するものにメソッド自体を渡しています。 – NobodyNada

+2

@ asma22システムはあなたがファイル名を渡すことを期待していますが、ファイル名を得るための指示を渡しています。私の例は、ファイル名を得るための指示に従い、その結果をシステムに渡します。それは理にかなっていますか? – NobodyNada