如何共享变量及其在 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;
正在声明 strong
和 assign
。作为一个int,应该只能是assign
,而不是strong
。 strong
将用于 Objective-c 对象,assign
用于原始 C 属性。
我想你想要的是:
@property (assign, nonatomic) int myVar;
关于这个我已经浏览了很多。但是我得到的结果告诉我,我应该使用 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;
正在声明 strong
和 assign
。作为一个int,应该只能是assign
,而不是strong
。 strong
将用于 Objective-c 对象,assign
用于原始 C 属性。
我想你想要的是:
@property (assign, nonatomic) int myVar;