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

Dav*_*nte 57 xcode warnings objective-c

当我打电话给当地的日常工作时,我收到了这个警告.

我的代码是这样的:

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

我在self.fetchLetter语句中收到警告.

那个例程看起来像这样:

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

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


.....   
}
Run Code Online (Sandbox Code Playgroud)

我更喜欢修复警告信息,有没有更好的方法来写这个?

谢谢!

Tom*_*ing 120

点符号(ie self.fetchLetter)用于属性,不用于任意方法.将self.fetchLetter被解释为"让'自我’,对'fetchLetter’属性",这是不是你想要的东西.

只需使用[self fetchLetter].

  • @Dov对于属性访问器方法(例如`[UIViewController view]`)来说肯定是正确的,但这个问题并不涉及这些问题.不过,我想通过谷歌搜索错误信息来了解到达这里的人是有用的. (2认同)

Dar*_*ust 12

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

我们这样做:

// Ensure view is loaded and all outlets are connected.
[self view];
Run Code Online (Sandbox Code Playgroud)

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

(void)[self view];
Run Code Online (Sandbox Code Playgroud)