在每个视图控制器中使用变量如何?

时间:2014-06-17 14:01:03

标签: ios objective-c uiviewcontroller

正如标题所说,我需要在不同的viewcontllers中使用相同的变量。

直到今天,当我想在不同的viewcontllers中使用变量时,我通过segues发送该特定变量,但我不认为这是一个好方法,它需要程序将变量从一个点传送到另一个点,如果有的话是5个视图控制器,这可能很乱。

当我搜索互联网时,我总是找到有关通过segues将变量从一个发送到另一个变量的代码,我已经阅读了有关全局变量的内容,但我不确定是否是那个。

示例:(3视图控制器程序)

用户打开应用,然后在第一个视图中点击“' 3'''按钮(或1-2-3-4-5)int x变量变为x = 3.后来他选择继续。

第二个视图控制器在屏幕上写入x + x用户点击到3个viewcontroller。(代码写在里面)

第三个视图控制器在屏幕上写入x * x用户点击到3个视图控制器。(代码写在里面)

正如你所看到的,我在不同的视图控制器中使用了那个x变量,请记住我不想在它们之间传递变量,所以任何想法都是可能的。

我的猜测是使用指针或在内存中占用一些空间我的malloc并从另一个视图控制器指向它可能会有效。

答案:正如下面的答案所述,这个方法有两种方式适合我。

1个视图控制器

int x =5;

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

[defaults setObject:[NSNumber numberWithInt:x] forKey:@"keyForTheValue"];
[defaults synchronize];

2视图控制器

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
int y = [[defaults objectForKey:@"keyForTheValue"] intValue];
intyazi.text = [[NSString alloc] initWithFormat:@"%d",  y];

1 个答案:

答案 0 :(得分:1)

有几种方法可以避免将变量从ViewController传递给ViewController。

但请记住,在某些情况下,传递它会更好。

Singleton Datacontainer

一种方法是使用Singleton Datacontainer:

标题(Threadsafe实现):

#import <foundation/Foundation.h>

@interface MyManager : NSObject {
    NSInteger *someProperty;
}

@property (nonatomic, retain) NSInteger *someProperty;

+ (id)sharedManager;

@end

实现:

#import "MyManager.h"

@implementation MyManager

@synthesize someProperty;

#pragma mark Singleton Methods

+ (id)sharedManager {
    static MyManager *sharedMyManager = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedMyManager = [[self alloc] init];
    });
    return sharedMyManager;
}

- (id)init {
  if (self = [super init]) {
      // Default value
      someProperty = @0;
  }
  return self;
}

@end

NSUserDefaults的

或者您可以使用NSUserDefaults。哪个值将持久值存储在用户目录中,并且在下次启动时也可用。

存储值:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

[defaults setObject:[NSNumber numberWithInt:yourIntValue] forKey:@"keyForTheValue"];
[defaults synchronize];

加载值:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
int yourIntValue = [[defaults objectForKey:@"keyForTheValue"] intValue];