Проблема с фрагментом кода, который вы показываете, заключается в том, что NSUserDefaults записывает значения на диск только при выходе из приложения (или, возможно, также, когда оно отправляется в фоновый режим в iOS 4).Если вам нужно заставить NSUserDefaults записывать значения ключей на диск, вызовите для него метод [[NSUserDefaults standardUserDefaults] synchronize].
Кроме того, вместо использования removeObjectForKey: в resetVar, почему бы не использовать setDouble:forKey: вместо этого?Таким образом, вы также можете избавиться от «двойного var» ivar в Class1, просто используя 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