【问题标题】:How to access a property of a viewcontroller from another one? iPhone如何从另一个视图控制器访问视图控制器的属性?苹果手机
【发布时间】:2013-02-10 08:48:26
【问题描述】:

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

  @property (nonatomic) BOOL updateOnServer;

还合成它,给它值,然后我尝试从另一个视图控制器 B 访问这个变量,像这样

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

  if (view.updateOnServer)

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

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

【问题讨论】:

  • 你得先弄清楚“实例”的含义
  • 本次updateOnServer中的第一个设置值
  • 我设定了价值。我写了这个。 :)
  • @Maria 我根据您的描述制作了一个示例项目......并且它工作顺利......给了我 YES 和 NO 的值
  • @SunTzu 我会仔细看的。也许这是另一个问题。:)

标签: iphone properties uiviewcontroller


【解决方案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;

【讨论】:

    【解决方案2】:

    您在 viewControllerA 中设置了 updateOnServer,在 viewControllerB 中创建了一个 updateOnServer 的新实例,您没有设置任何内容。所以它采用BOOL的默认值,即NO。

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

    你有很多方法可以做:使变量成为全局变量、静态变量、单例变量、作为参数传递、作为通知发布。

    【讨论】:

    • 我怎样才能访问viewcontrollerB的实例?,这样我就不会创建一个新的实例。:)
    • 多种方式,使其成为全局、静态、单例、作为参数传递、作为通知发布。
    • 你如何从 A 到 B?
    • @rdurand : 请提及收件人:)
    • @AnoopVaidya:哎呀,我的错。无论如何,您的回答似乎解决了问题:)
    【解决方案3】:

    NSUserDefaults 是一种保存和检索变量信息的简单方法,虽然有时不受欢迎。
    使用 NSUserDefaults 查看Link 了解如何使用 NSUserDefaults。 或者你可以声明全局变量。

    【讨论】:

    • 使用 NSUserDefaults 在类之间传递变量从来都不是很好的理由,尤其是在这种情况下,委托或通知是一个明确的选择。
    • @CarlVeazey 我同意你的观点,你也提到不是首选但易于使用:-)
    猜你喜欢
    • 2012-04-02
    • 1970-01-01
    • 1970-01-01
    • 2011-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多