在属于' AppDelegate *'的对象上找不到iOS属性

时间:2012-02-03 17:12:13

标签: objective-c ios

我有两个viewControllers访问NSNumber上的AppDelegate。其中一个人可以看到它,而另一个则不能。我完全对此感到困惑。

有问题的人有这段代码。

AppDelegate *dataStore = (AppDelegate *)[[UIApplication sharedApplication] delegate];
dataStore.downHUD = [NSNumber numberWithFloat:(float)progress];

另一个有这个。

AppDelegate *dataStore = (AppDelegate *)[[UIApplication sharedApplication] delegate];
dataStore.downHUD = [NSNumber numberWithFloat:(float)0];

两者都在.m文件中导入AppDelegate,但最终以

结尾
  

在'AppDelegate *'

类型的对象上找不到属性'downHUD'

与第一个。 谁能帮我看看有什么不对?

我错误地将大量代码复制并粘贴到AppDelegate,这已经得到纠正。是否有某种链接可能被破坏?

3 个答案:

答案 0 :(得分:7)

也许你的AppDelegate课程中没有这样的属性。

在接口声明下的AppDelegate.h中,您需要

@property (nonatomic, retain) NSNumber* downHUD;

在您的AppDelegate.m实施声明中,您需要

@synthesize downHUD;

通过这种方式,您可以定义访问器(getter和setter)来访问名为downHUD的实例变量。这个访问者是公开的,你可以做到

dataStore.downHUD = ...

也许这可能是错误。但是如果没有AppDelegate代码,很难理解发生了什么。

希望它有所帮助。

修改

在应用程序委托中访问数据并不是一个好策略。我建议你使用像singletons-appdelegates-and-top-level.html

这样的单身人士

编辑2:

@interface SingletonModel : NSObject {
    NSNumber* downHUD_;
}

+ (id)sharedInstance;

@property (nonatomic, retain) NSNumber* downHUD;

@end

#import "SingletonModel.h"

@implementation SingletonModel

@synthesize downHUD = downHUD_;

static SingletonModel *sharedInstance = nil;

+ (SingletonModel *)sharedInstance {
    if (sharedInstance == nil) {
        sharedInstance = [[super allocWithZone:NULL] init];
    }

    return sharedInstance;
}

- (id)init
{
    self = [super init];

    if (self) {

    }

    return self;
}

-(void)dealloc
{
    [super dealloc];
}

+ (id)allocWithZone:(NSZone*)zone {
    return [[self sharedInstance] retain];
}

- (id)copyWithZone:(NSZone *)zone {
    return self;
}

- (id)retain {
    return self;
}

- (NSUInteger)retainCount {
    return NSUIntegerMax;
}

- (oneway void)release {

}

- (id)autorelease {
    return self;
}

@end

设置模型:

SingletonModel* model = [SingletonModel sharedInstance];
model.downHUD = ...

阅读你的模特:

SingletonModel* model = [SingletonModel sharedInstance];
NSNumber* n = model.downHUD;

有关其他信息,请阅读iphone-code-snippet-the-singleton-patternsingleton-classes。关于单身人士,您可以在Cocoa Fundamentals GuideSingleton处找到苹果文档。

答案 1 :(得分:1)

您的两个视图控制器可能引用不同的AppDelegate代码。即使Xcode Project Navigator只显示一组AppDelegate文件,并且Jump to Definition在两种情况下都显示相同的AppDelegate类定义,但其中一个视图控制器实际上可能有不同的委托代码。

我在委托类定义中遇到了这个问题,其中一些成员变量只在一个视图控制器中可用,而在另一个中没有。

右键单击Project Navigator中的每个ViewController.m文件,然后使用Show in Finder查看它们是否与所需的AppDelegate文件位于同一位置。如果没有,请将VC文件移动到正确的位置并将其添加到项目中。

答案 2 :(得分:0)

如果您已导入头文件,那么它应该可以工作。您是否尝试清理并重新构建项目?您可以使用CMD + Shift + K(或从项目菜单中选择清洁)来执行此操作。