Как сохранить скрытое состояние кнопки как NSUserDefault?

Ниже у меня есть код, который просто скрывает кнопку через систему делегирования в Xcode. Я считаю, что все это работает, однако, когда я передаю представления обратно в представление leveSelector, делегат недействителен, поэтому кнопка не отображается как скрытая. Из-за этого я хотел бы применить NSUserDefaults для сохранения состояния кнопки, чтобы, когда я вернусь к представлению «levelComplete» позже в игре, я бы хотел, чтобы кнопка не была скрыта.

Вот код для delegate системы, которую я использую:

Здесь у меня есть код levelComplete ... .h

#import <UIKit/UIKit.h>
#import "levelComplete.h"
#import "LevelSelector.h"

@interface levelComplete : UIViewController{
  }
 @property (nonatomic, strong) id<CustomDelegate> delegatePpty;

 @end

.m

@implementation levelComplete
@synthesize delegatePpty;

-(void)someAction
 {
[self.delegatePpty hideUnhidebutton:YES];//Call the delegate method to execute
 }


 - (void)viewDidLoad
   {
     [super viewDidLoad];
     // Do any additional setup after loading the view from its nib.
     [self someAction]; // Here I call my action
   }
@end

Вот код leveSelector ...

.h

  @protocol CustomDelegate <NSObject>
  -(void)hideUnhidebutton:(BOOL)value;
  @end

#import <UIKit/UIKit.h>
#import "levelComplete.h"
#import "LevelSelector.h"

@interface LevelSelector : UIViewController <CustomDelegate>{        

}

@property (nonatomic, strong) UIButton *level1;

@end

.m

@implementation LevelSelector
@synthesize level1;

-(void)hideUnhidebutton:(BOOL)value
 {
  [self.level1 setHidden:value];

  }

Итак, чтобы уточнить, я хотел бы сохранить кнопку, когда она была скрыта как NSUserDefault. В этом случае кнопка, которую я хочу скрыть, называется level1.

Изменить: спасибо всем, кто разместил, ваш код отлично работал


person Thomas Stone    schedule 02.04.2013    source источник
comment
возможный дубликат Сохранить строку в NSUserDefaults?   -  person Anoop Vaidya    schedule 02.04.2013


Ответы (3)


Ответ Сапи уже охватывает ваш комментарий Как мне загрузить NSUserDefaults

BOOL yourBoolValue = YES;

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:[NSNumber numberWithBool:yourBoolValue] forKey:@"YourVariableKey"];

В последней строке уже есть желаемый результат. [NSUserDefaults standardUserDefaults] является одноэлементным, а также постоянным, поэтому вы можете создавать его в любом контексте, имея один и тот же экземпляр.

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
BOOL restoredBoolValue = [[defaults objectForKey:@"YourVariableKey"] boolValue];
[self.level1 setHidden:restoredBoolValue]; 

Муравей, вот и все. Вы можете в основном сохранить все в NSUserDefaults. Просто ознакомьтесь с справочником Apple < / а>.

person Arndt Bieberstein    schedule 02.04.2013

Вы можете сохранить значение в NSUserDefaults простым способом:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:[NSNumber numberWithBool:value]
             forKey:@"SomeSensibleKey"];

Вы можете проверить сохраненное состояние с помощью:

[[defaults objectForKey:@"SomeSensibleKey"] boolValue]
person sapi    schedule 02.04.2013
comment
Первая строка приведенного выше кода загружает стандартный словарь значений по умолчанию для вашего приложения. Если у вас нет особых потребностей (которые, судя по вопросу, я не думаю, что у вас есть), это должно работать нормально. - person sapi; 02.04.2013

Чтобы сохранить логическое значение по умолчанию, вы должны вызвать метод setBool:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setBool:YES forKey:@"ButtonHiddenKey"];

Чтобы загрузить логическое значение из пользовательских значений по умолчанию (в методе инициализации):

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
button.hidden = [defaults boolForKey:@"ButtonHiddenKey"];

Также есть сообщения для хранения других типов переменных, таких как setInteger, setFloat и т. Д.

person boweidmann    schedule 02.04.2013