正如标题所说,我需要在不同的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];
答案 0 :(得分:1)
有几种方法可以避免将变量从ViewController传递给ViewController。
但请记住,在某些情况下,传递它会更好。
一种方法是使用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 *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:[NSNumber numberWithInt:yourIntValue] forKey:@"keyForTheValue"];
[defaults synchronize];
加载值:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
int yourIntValue = [[defaults objectForKey:@"keyForTheValue"] intValue];