web-dev-qa-db-ja.com

Xcode警告「プロパティアクセスの結果は使用されていません-ゲッターは副作用に使用しないでください」

ローカルルーチンを呼び出しているときにこの警告が表示されます。

私のコードはこれです:

-(void)nextLetter {
    // NSLog(@"%s", __FUNCTION__);
    currentLetter ++;
    if(currentLetter > (letters.count - 1))
    {
        currentLetter = 0;
    }
    self.fetchLetter;
}

Self.fetchLetterステートメントで警告が表示されます。

そのルーチンは次のようになります。

- (void)fetchLetter {
    // NSLog(@"%s", __FUNCTION__);
    NSString *wantedLetter = [[letters objectAtIndex: currentLetter] objectForKey: @"langLetter"];

    NSString *wantedUpperCase = [[letters objectAtIndex: currentLetter] objectForKey: @"upperCase"];    


.....   
}

警告メッセージを修正したいのですが、これを書くより良い方法はありますか?

ありがとう!

57
David DelMonte

ドット表記(つまり、self.fetchLetter)は、任意のメソッドではなく、プロパティを対象としています。 self.fetchLetterは、「 'self'の 'fetchLetter'プロパティを取得する」と解釈されていますが、これは意図したものではありません。

代わりに[self fetchLetter]を使用してください。

120
Tom Dalling

新しいXcodeバージョンでは、[object method];は警告をトリガーする場合があります。しかし、たとえばView Controllerを扱う場合など、実際にプロパティを呼び出して結果を破棄する必要があり、ビューが実際にロードされていることを確認する必要があります。

だから私たちはやっていた:

// Ensure view is loaded and all outlets are connected.
[self view];

これにより、「プロパティアクセス結果は未使用-ゲッターは副作用に使用しないでください」警告もトリガーします。解決策は、結果の型をvoidにキャストすることにより、意図的に行われたことをコンパイラに知らせることです。

(void)[self view];
12
DarkDust

このような構文を使用してfetchLetterを宣言していますか?

@property (retain) id fetchLetter;

それはあなたがしていることにとって間違っているように見えます。プロパティは、(getterの場合)副作用のない変数アクセサを目的としています。

次のように、fetchLetterをメソッドとして宣言する必要があります。

- (void) fetchLetter;

以下を使用してアクセスします。

[self fetchLetter]
4
Chris Devereux

トムとクリスの両方の回答を使用して、問題を解決しました。私の場合はCoreLocationプロジェクトです。

私は宣言する:

@property (strong, nonatomic)CLLocationManager *locationManager;

そして、次のように実装されます:

@synthesize locationManager = _locationManager;
....
- (void) dealloc {
         [self locationManager];
}
0
LAOMUSIC ARTS