在"AppDelegate*"类型的对象上找不到iOS属性

Jor*_*gen 0 objective-c ios

我有两个viewControllers访问NSNumberAppDelegate.其中一个人可以看到它,而另一个则不能.我对这完全感到困惑.

有问题的那个有这个代码.

AppDelegate *dataStore = (AppDelegate *)[[UIApplication sharedApplication] delegate];
dataStore.downHUD = [NSNumber numberWithFloat:(float)progress];
Run Code Online (Sandbox Code Playgroud)

另一个有这个.

AppDelegate *dataStore = (AppDelegate *)[[UIApplication sharedApplication] delegate];
dataStore.downHUD = [NSNumber numberWithFloat:(float)0];
Run Code Online (Sandbox Code Playgroud)

两者都在.m文件中导入AppDelegate,但我最终得到了

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

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

我错误地复制并粘贴了很多代码AppDelegate,这已得到纠正.是否有某种链接可能被破坏?

Lor*_*o B 7

也许你AppDelegate班上没有这样的财产.

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

@property (nonatomic, retain) NSNumber* downHUD;
Run Code Online (Sandbox Code Playgroud)

在您的AppDelegate.m中,您需要具有实现声明

@synthesize downHUD;
Run Code Online (Sandbox Code Playgroud)

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

dataStore.downHUD = ...
Run Code Online (Sandbox Code Playgroud)

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

希望能帮助到你.

编辑:

在应用程序委托中访问数据并不是一个好策略.我建议你使用单身人士这样的单身人士 - 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
Run Code Online (Sandbox Code Playgroud)

要设置模型:

SingletonModel* model = [SingletonModel sharedInstance];
model.downHUD = ...
Run Code Online (Sandbox Code Playgroud)

要阅读您的模型:

SingletonModel* model = [SingletonModel sharedInstance];
NSNumber* n = model.downHUD;
Run Code Online (Sandbox Code Playgroud)

有关其他信息,请阅读iphone-code-snippet-the-singleton-patternsingleton-classes.关于Singletons,你可以在Cocoa Fundamentals GuideSingleton的苹果文档中找到.