使用另一个类中的变量

时间:2014-08-13 14:31:32

标签: ios objective-c variables

我正在尝试使用Objective-C制作iOS应用。但是,我遇到了一个问题。基本上,我在一个类中设置myVariable的值,然后尝试在另一个类中使用它。这是我的代码。

//This is in Class2
#import Class1
Class1 *class = [[Class1 alloc] init];

//Then I try to log my variable
NSLog(@"%@", Class1.myVariable);

我不想将myVariable设置为class2中的任何内容,因为我希望它保持与class1中相同的值。但是,使用我的代码,myVariable在class2中返回(null)。在class1 myVariable是6.有谁认为他们可以帮助我?谢谢!

以下是我在Class1中的代码示例。

- (IBAction)six:(id)sender {
_numberOfDice = 6;
 [self saveNumber];
self.checkmark.hidden = YES;
self.checkmark2.hidden = YES;
self.checkmark3.hidden = YES;
self.checkmark4.hidden = YES;
self.checkmark5.hidden = YES;
self.checkmark6.hidden = NO;
}
-(void) saveNumber {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentPath = [paths lastObject];
NSString *filePath = [documentPath stringByAppendingPathComponent:@"number"];
_amountString = [NSString stringWithFormat:@"%d", _numberOfDice];
BOOL isSuccessful = [NSKeyedArchiver archiveRootObject:_amountString toFile:filePath];
if(isSuccessful) {
    NSLog(@"It has saved.");
    NSLog(@"the string is %@", _amountString);
    NSLog(@"The integer is %d", _numberOfDice);

}
}

-(void) loadNumber {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentPath = [paths lastObject];
NSString *filePath = [documentPath stringByAppendingPathComponent:@"number"];
_amountString = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];
if(!_amountString) {
    _amountString = [[NSString alloc] init];
}
}

正如您在上面的代码中看到的,有人可以单击按钮6,_numberOfDice设置为6.然后我将其转换为字符串并保存该字符串。当我运行viewDidLoad时,我加载了数字。字符串(_amountString)是我想传递给Class2的变量。我在Class1中设置它,然后我想将它传递给Class2。

1 个答案:

答案 0 :(得分:0)

好的,这是你的问题。

编辑myVariable in Class1时,您正在为该特定实例执行此操作。实例是对象的特定副本。您可以拥有一个Class1个实例,也可以拥有100个Class1个实例。每个都将是独特的。在您的情况下,您现在有2 Class1秒。您编辑的第一个,它知道myVariable。第二个没有,因为你从未点击过loadNumber / saveNumber。

因此,您设置了Class1原来的myVariable = 6。但是,当您执行Class1 *class = [[Class1 alloc] init];时,您会创建一个全新的副本。这就像去商店买新苏打水。即使你以前购买过这种苏打水,它仍然不同,因为这是一种全新的。

我看到的另一个问题是,保存一个数字会有很大的不足 - 你要创建一个新文件来保存数字,然后每次都读取它。这非常低效和复杂。 NSUserDefaults是一个更好的选择,在这里更有意义。

有很多方法可以解决您的问题。老实说,我会在myVariable中保存NSUserDefaults。然后在Class2中,您只需阅读NSUserDefaults即可。另一种解决方案是在myVariable上设置Class1静态变量,或者保存对您编辑的Class1的引用。但最简单的解决方案是保存到NSUserDefaults并在Class2

中读取