如何从另一个访问viewcontroller的属性?苹果手机

时间:2013-02-25 08:45:01

标签: iphone properties uiviewcontroller

我在viewcontroller A中定义了一个属性

  @property (nonatomic) BOOL updateOnServer;

并合成它,给它值,然后我尝试从另一个viewcontroller B访问这个变量

  A * view = [[A alloc] init];

  if (view.updateOnServer)

但它不起作用。 updateOnServer始终为NO。

有人知道如何解决这个问题吗?

3 个答案:

答案 0 :(得分:3)

您在viewControllerA中设置了updateOnServer,并在viewControllerB中创建了一个未设置为任何内容的新updateOnServer实例。因此它采用默认值BOOL为NO。

请查看here以寻求可能的解决方案。

你有很多方法可以做:将变量设为global,static,singleton,pass作为参数,post as notification。

答案 1 :(得分:2)

保存和检索变量信息的一种简单方法是NSUserDefaults,但不是首选。 使用NSUserDefaults查看Link以了解如何使用NSUserDefaults。 或者您可以声明全局变量。

答案 2 :(得分:1)

您可以始终使用单身类,如下所示:

按如下方式创建一个新类:

ServerCheck.h

#import <Foundation/Foundation.h>

@interface ServerCheck : NSObject
{
    BOOL updateOnServer;
}
@property (nonatomic) BOOL updateOnServer;

+ (id)sharedSingletonController;
@end

ServerCheck.m

#import "ServerCheck.h"

@implementation ServerCheck
@synthesize updateOnServer
+(ServerCheck*)sharedSingletonController{

    static ServerCheck *sharedSingletonController;

    @synchronized(self) {
        if(!sharedSingletonController){
            sharedSingletonController = [[ServerCheck alloc]init];
        }
    }

    return sharedSingletonController;
}

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

        }
    return self;
}

@end

您可以按如下方式访问BOOL值:

ServerCheck *serverData = [ServerCheck sharedSingletonController];
serverData.updateOnServer = YES;