之前可能已经提出过这个问题,所以我很抱歉。
我正在开发一款iPhone应用程序,让我说我在class1中有一个变量var。我想在class2中添加一个UIButton,当命中时将var重置为0.当应用程序关闭时保存var值,所以当视图加载var时会分配值(我假设你们可能已经想到了但是我想会澄清代码)。 我该怎么写这样的东西?这基本上就是我尝试过的:
@interface Class1 {
double var;
}
-(void)resetVar;
@end
@implementation Class1
-(void)viewDidLoad {
NSUserDefaults *loadCount = [NSUserDefaults standardUserDefaults];
var = [loadNoCount doubleForKey:@"count"];
}
-(void)resetVar {
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"count"];
var = 0;
}
@interface Class2 {
Class1 *classObj;
}
@property(nonatomic, retain) Class1 *classObj;
-(IBAction)reset:(id)sender;
@end
@implementation Class2
-(void)viewDidLoad {
classObj = [[Class1 alloc] init];
}
-(IBAction)reset:(id)sender {
[classObj resetVar];
}
@end
答案 0 :(得分:1)
在要设置变量的类上使用setter方法-setVar:或类似方法。您无法访问其他对象的实例变量:默认情况下它们都是私有的。
答案 1 :(得分:0)
您要显示的代码片段的问题是NSUserDefaults仅在应用退出时将值写入磁盘(或者也可能在iOS 4中将其发送到后台时)。如果您需要强制NSUserDefaults将密钥的值写入磁盘,请在其上调用[[NSUserDefaults standardUserDefaults] synchronize]方法。
另外,不要在resetVar中使用removeObjectForKey:为什么不使用setDouble:forKey:而不是?这样你就可以摆脱Class1中的“double var”ivar,只需使用NSUserDefaults作为数据存储。
以下是有关同步方法的一些信息,来自NSUserDefaults文档:
因为此方法是定期自动调用的,所以只有在您不能等待自动同步时(例如,如果您的应用程序即将退出)或者您希望将用户默认值更新为打开时,才使用此方法即使您没有进行任何更改,也可以使用磁盘。
这就是我将如何实现您在代码中描述的内容:
@interface Class1
{
}
- (void)resetVar;
@end
@implementation Class1
- (void)viewDidLoad
{
[self resetVar];
}
- (void)resetVar
{
[[NSUserDefaults standardUserDefaults] setDouble:0.0 forKey:@"count"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
@end
@interface Class2
{
Class1 *classObj;
}
- (IBAction)reset:(id)sender;
@end
@implementation Class2
- (void)dealloc
{
[classObj release];
}
- (void)viewDidLoad
{
classObj = [[Class1 alloc] init];
}
- (IBAction)reset:(id)sender
{
[classObj resetVar];
}
@end
答案 2 :(得分:-1)
尝试使用单身http://developer.apple.com/library/mac/#documentation/General/Conceptual/DevPedia-CocoaCore/Singleton.html 如果你不能通过阅读来解决这个问题,请告诉我,我会做一个例子!