我正在尝试使用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。
答案 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