如何共享变量及其在 Objective-C 中的值?

How to share a variable AND it's value in Objective-C?

关于这个我已经浏览了很多。但是我得到的结果告诉我,我应该使用 appDelegate 或 singleton 等。 所有这些都会产生相同的结果。也就是说,我可以在不同的 ViewController 中共享一个变量,但是一旦 ViewController 发生变化,变量就会失去它的价值。 例如,我使用了一个名为 myVar 的 int 类型的变量。我在 AppDelegate 中声明了它,然后我可以在 AppDelegate 的帮助下在所有 ViewController 中使用它。但是当我从 A ViewController 移动到 B ViewController 时,myVar 变量的值再次变为“0”。我不想要那个。我希望变量保持它的值。而且我不想在 pushViewController 等的帮助下传递这些数据。请给我一个好的解决方案。

AppDelegate.h

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;

@property (strong, assign) int myVar;

@end

FirstViewController.m

- (void)viewDidLoad
{
[super viewDidLoad];
AppDelegate* app = (AppDelegate*)[UIApplication sharedApplication].delegate;

app.myVar = 1;
NSLog(@"%d",app.myVar);  //Shows "1" in Log  
}


SecondViewController.m

- (IBAction)pressButton:(id)sender{
AppDelegate * app = (AppDelegate*)[UIApplication sharedApplication].delegate;

  NSLog(@"%d",app.myVar);  // Shows "0" in Log (But I want it to show "1" as I have already set "myVar" value as "1" in my FirstViewController)


}

如果你的 var 是一个 NSString,你可以简单地使用 [copy] 协议。例如

NSString *eString = [cString 复制];

如果它是一个对象,你需要为它实现[复制]协议class。

首先检查你的代码有没有错误

AppDelegate.h

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;

@property (nonatomic, assign) int myVar;

并检查它在 FirstViewController.m 和 SecondViewController.m

中给出相同的值

您的 @property (strong, assign) int myVar; 正在声明 strongassign。作为一个int,应该只能是assign,而不是strongstrong 将用于 Objective-c 对象,assign 用于原始 C 属性。

我想你想要的是:

@property (assign, nonatomic) int myVar;