我对此浏览了很多。但是我得到的结果告诉我应该使用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;
同时声明strong
和assign
。作为int,它应该仅为assign
,而不是strong
。strong
将用于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]协议。