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"]; ..... } 

我宁愿修复警告消息,有没有更好的方式来写这个?

谢谢!

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

只需使用[self fetchLetter]

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

所以我们在做:

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

这现在也触发了“未使用的财产访问结果 – 吸气剂不应该用于副作用”的警告。 解决的方法是让编译器知道这是通过将结果types转换为void来有意识地完成的:

 (void)[self view]; 

你使用这样的语法声明fetchLetter?

 @property (retain) id fetchLetter; 

这看起来不对,你在做什么。 属性的目的是作为variables访问器(在getter的情况下)没有任何副作用。

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

 - (void) fetchLetter; 

并使用它来访问它:

 [self fetchLetter] 

我刚刚解决了我的问题,在我的情况下CoreLocation项目,同时使用汤姆和克里斯的答案 –

我宣布:

 @property (strong, nonatomic)CLLocationManager *locationManager; 

并执行如下:

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