Предупреждение XCode "Результаты доступа к свойству не используются - геттеры не должны использоваться для побочных эффектов" - PullRequest
57 голосов
/ 18 марта 2011

Я получаю это предупреждение при вызове локальной процедуры.

Мой код такой:

-(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"];    


.....   
}

Я предпочитаю исправлять предупреждающие сообщения, есть ли лучший способ написать это?

Спасибо!

Ответы [ 4 ]

118 голосов
/ 18 марта 2011

Точечная нотация (т. Е. self.fetchLetter) предназначена для свойств, а не для произвольных методов. self.fetchLetter интерпретируется как «получить свойство« fetchLetter »для« self »», что не соответствует вашим намерениям.

Просто используйте [self fetchLetter].

12 голосов
/ 20 февраля 2015

В более новых версиях Xcode, даже [object method]; может вызвать предупреждение.Но иногда нам действительно нужно вызывать свойство и отбрасывать результат, например, когда имеешь дело с контроллерами представления, и нам нужно убедиться, что представление действительно загружено.*

Теперь это также вызывает предупреждение «Результаты доступа к свойству не используются - геттеры не должны использоваться для побочных эффектов» .Решение состоит в том, чтобы сообщить компилятору, что это сделано преднамеренно, приведя тип результата к void:

(void)[self view];
4 голосов
/ 18 марта 2011

Вы объявляете fetchLetter, используя такой синтаксис?

@property (retain) id fetchLetter;

Это выглядит неправильно для того, что вы делаете.Свойства предназначены для доступа к переменным, которые (в случае получения) не имеют побочных эффектов.

Вы должны объявить fetchLetter как метод, например так:получить доступ к нему с помощью:

[self fetchLetter]
0 голосов
/ 02 октября 2012

Я только что решил свою проблему, в моем случае это проект CoreLocation, используя оба ответа Тома и Криса -

Я заявляю:

@property (strong, nonatomic)CLLocationManager *locationManager;

И реализовано как:

@synthesize locationManager = _locationManager;
....
- (void) dealloc {
         [self locationManager];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...