gpt4 book ai didi

iphone - "speed view"的局部声明隐藏了实例变量

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:09:13 26 4
gpt4 key购买 nike

所以我在几个小时内一直在寻找为什么我的 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;

我真的不明白为什么它说我隐藏了实例变量。

最佳答案

您有一个名为 speedView 的 ivar(实例变量)。

在你的方法中

- (void)setspeedView:(UILabel *)speedView

speedView 是一个局部变量,其名称与 ivar 冲突。

如果您使用的是现代版本的编译器,只需删除 @synthesize 指令即可。

编译器会自动添加这种形式

@synthesize speedView = _speedView

这将创建 ivar _speedView,其名称不再与局部变量冲突。

另请注意,同时声明实例变量和属性是多余的。 ivar 将由(隐式)@synthesize 指令自动创建。

这是您类(class)的“现代”版本:

.h

#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;

.m

@implementation MainViewController

- (void)setspeedView:(UILabel *)speedView {
[speedView setText:[NSString stringWithFormat:@"%d", self.speedCount]];
self.speedCount = 0;
self.speedCount++;
}

请注意:

  • 属性很好:尽可能使用它们
  • @synthesize 是隐式的
  • @sythesize 的隐式版本为属性 ivar 声明了一个 _ivar
  • 始终通过 getters/setters 访问变量,即 self.ivarinit 方法的一部分。如果您需要直接访问 var,请使用 _ivarself->_ivar

作为最后的评论,这看起来有点奇怪

self.speedCount = 0;
self.speedCount++;

它可以被替换为

self.speedCount = 1;

你确定是这个意思吗?此外,正如其他人在评论中指出的那样,您没有使用方法参数 speedView。这闻起来很糟糕,您可能需要仔细检查您的实现。

关于iphone - "speed view"的局部声明隐藏了实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18221808/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com