当我打电话给当地的例行公事时,我收到了这个警告。
我的代码是:
-(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"];
.....
}
我更喜欢修复警告信息,有没有更好的方法来写这个?
谢谢!
答案 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];
}