Xcode警告“未使用属性访问结果 - 不应将getter用于副作用”

时间:2011-03-17 23:55:06

标签: objective-c xcode warnings

当我打电话给当地的例行公事时,我收到了这个警告。

我的代码是:

-(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 个答案:

答案 0 :(得分:117)

点符号(即self.fetchLetter)用于属性,而不是用于任意方法。 self.fetchLetter被解释为“获取'self'的'fetchLetter'属性,”这不是你想要的。

只需使用[self fetchLetter]

答案 1 :(得分:12)

在较新的Xcode版本中,即使[object method];也可能触发警告。但有时我们确实需要调用属性并丢弃结果,例如在处理视图控制器时我们需要确保视图实际已加载。

所以我们在做:

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

现在这也会触发“未使用属性访问结果 - 不应将getter用于副作用”警告。解决方案是让编译器通过将结果类型转换为void来有意识地完成它:

(void)[self view];

答案 2 :(得分:4)

您是否正在使用这样的语法声明fetchLetter?

@property (retain) id fetchLetter;

你正在做的事情看起来不对。属性旨在成为可变访问器(在getter的情况下)没有任何副作用。

您应该将fetchLetter声明为方法,如下所示:

- (void) fetchLetter;

并使用以下方式访问它:

[self fetchLetter]

答案 3 :(得分:0)

我刚刚解决了我的问题,在我的案例中是一个CoreLocation项目,使用Tom和Chris的答案 -

我宣布:

@property (strong, nonatomic)CLLocationManager *locationManager;

并实施如下:

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