Подтвердить что ты не робот

Предупреждение 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"];    


.....   
}

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

Спасибо!

4b9b3361

Ответ 1

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

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

Ответ 2

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

Итак, мы делали:

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

Это также приводит к тому, что предупреждение "Недопустимый результат доступа к ресурсам не используется, а не для предупреждения побочных эффектов". Решение заключается в том, чтобы компилятор знал, что это сделано намеренно, путем литья типа результата в void:

(void)[self view];

Ответ 3

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

@property (retain) id fetchLetter;

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

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

- (void) fetchLetter;

и получить доступ к нему, используя:

[self fetchLetter]

Ответ 4

Я только что решил проблему, в моем случае проект CoreLocation, используя оба ответа от Tom и Chris -

Я заявляю:

@property (strong, nonatomic)CLLocationManager *locationManager;

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

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