所以我几个小时后一直在寻找为什么我的iPhone应用程序讨厌我。这是我得到的错误: 警告:'speedView'的本地声明隐藏了实例变量。 这是我的.m文件
@implementation MainViewController
@synthesize speedCount;
@synthesize speedView;
@synthesize popoverController;
- (void)setspeedView:(UILabel *)speedView
{
[speedView setText: [NSString stringWithFormat:@"%d",speedCount]];
speedCount = 0;
speedCount++;
}
.h文件
#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>
@interface MainViewController : UIViewController <LoginDelegate,WEPopoverParentView,PopoverControllerDelegate,MainMenuDelegate,MKMapViewDelegate,UIActionSheetDelegate,UIAccelerometerDelegate, CLLocationManagerDelegate>
{
AppDelegate *appDelegate;
IBOutlet MKMapView *userMap;
IBOutlet UILabel *speedView;
CLLocationManager *locationManager;
}
@property (strong, nonatomic) IBOutlet UILabel *speedView;
@property(nonatomic) int speedCount;
我真的不明白为什么它说我隐藏了实例变量。
答案 0 :(得分:3)
您有一个名为speedView
的ivar(实例变量)。
在你的方法中
- (void)setspeedView:(UILabel *)speedView
speedView
是一个局部变量,其名称与ivar冲突。
如果您使用的是现代版本的编译器,请删除@synthesize
指令。
它将由编译器以这种形式自动添加
@synthesize speedView = _speedView
将创建ivar _speedView
,其名称不会与局部变量发生冲突。
另请注意,声明实例变量和属性都是多余的。 ivar将由(隐式)@synthesize
指令自动创建。
这是你班级的“现代”版本:
#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>
@interface MainViewController : UIViewController <LoginDelegate,WEPopoverParentView,PopoverControllerDelegate,MainMenuDelegate,MKMapViewDelegate,UIActionSheetDelegate,UIAccelerometerDelegate, CLLocationManagerDelegate>
@property (strong, nonatomic) IBOutlet UILabel *speedView;
@property (strong, nonatomic) CLLocationManager *locationManager;
@property (strong, nonatomic) IBOutlet MKMapView *userMap;
@property (strong, nonatomic) AppDelegate *appDelegate;
@property (nonatomic) int speedCount;
@implementation MainViewController
- (void)setspeedView:(UILabel *)speedView {
[speedView setText:[NSString stringWithFormat:@"%d", self.speedCount]];
self.speedCount = 0;
self.speedCount++;
}
请注意:
@synthesize
是隐含的@sythesize
的隐式版本为属性_ivar
声明ivar
self.ivar
,来自init
方法的一部分。如果您需要直接访问var,请使用_ivar
或self->_ivar
作为最后的评论,这看起来有点奇怪
self.speedCount = 0;
self.speedCount++;
它可以替换为
self.speedCount = 1;
你确定这是你的意思吗?此外,如其他人的评论中所述,您未使用方法参数speedView
。这闻起来很糟糕,你可能想要仔细检查你的实现。