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



我对此浏览了很多。但是我得到的结果告诉我应该使用appDelegate或者singleton等等。所有这些都会产生相同的结果。即,我可以在不同的ViewController中共享一个变量,但一旦ViewController发生更改,该变量就会失去其值。例如,我使用了一个名为myVar的int类型变量。我在AppDelegate中声明了它,然后在AppDelegate的帮助下,我可以在所有ViewControllers中使用它。但是,一旦我从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)

}

您的@property (strong, assign) int myVar;同时声明strongassign。作为int,它应该仅为assign,而不是strongstrong将用于Objective-c对象,assign用于基元c属性。

我认为你想要的是以下内容:

@property (assign, nonatomic) int myVar;

首先检查您的代码是否存在一些错误

AppDelegate.h
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@property (nonatomic, assign) int myVar;

并检查它在FirstViewController.m和SecondViewController-m 中给出的值是否相同

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

NSString*eString=[cString-copy];

如果它是一个对象,则需要为该类实现[copy]协议。

相关内容

  • 没有找到相关文章

最新更新