我有一个标签,我正在显示倒数计时器.
现在,如果我关闭我的应用程序,计时器将关闭,标签的文本也将关闭.我知道我们可以保存标签的文本值.但是,当应用程序再次启动时,我们如何显示正确的倒计时.
假设我在3分钟后关闭00:05:35当应用程序再次启动时,标签应该显示00:02:35并且计时器应该在那里进行剩余的倒计时
如何保存点的颜色,以便在打开和关闭应用程序时,点是用户最后设置的颜色?
有人可以向我解释如何使用NSUserDefaults以及在哪种方法中声明NSUserDefaults.
到目前为止我有这个:
NSData *data = [NSArchiver archivedDataWithRootObject:color];
[[NSUserDefaults standardUserDefaults] setObject:data forKey:@"MyColor"];
NSData *data = [[NSUserDefaults standardUserDefaults] objectForKey:@"MyColor"];
NSColor *color = [NSUnarchiver unarchiveObjectWithData:data];
Run Code Online (Sandbox Code Playgroud)
我遵循的教程链接:http: //www.mactech.com/articles/mactech/Vol.25/25.04/2504RoadtoCode/index.html
我的主菜单(MainMenu.xib)中有一个名为"Word Wrap"的NSMenuItem.它的值绑定到我的共享用户默认控制器,也在XIB中实例化.它在选择时还会发送以下操作:
- (IBAction)toggleWordWrap:(id)sender {
NSUserDefaultsController *ctrlr = [NSUserDefaultsController sharedUserDefaultsController];
if ([[[ctrlr values] valueForKey:@"wordWrapIsEnabled"] boolValue]) {
// turn on word wrap
} else {
// turn off word wrap
}
}
Run Code Online (Sandbox Code Playgroud)
在我的app delegate +initialize方法中,我使用默认值填充标准用户默认值:
+ (void)initializeDefaults {
NSDictionary *defaults = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:NO], @"wordWrapIsEnabled",
// etc.
nil];
NSUserDefaultsController *ctrlr = [NSUserDefaultsController sharedUserDefaultsController];
[ctrlr setInitialValues:defaults];
}
Run Code Online (Sandbox Code Playgroud)
我的问题是我的NSMenuItem状态与我的用户默认值不同步.以下是发生的事情的时间表:
应用发布:
wordWrapIsEnabled 没有第一次选择Word Wrap:
wordWrapIsEnabled不是(BZZZT WRONG)第二次选择Word Wrap:
wordWrapIsEnabled是(BZZZT …嗨,我想更新密钥的数据,但它仍然保持不变我的代码是:
NSUserDefaults *userNamePrefs = [NSUserDefaults standardUserDefaults];
[userNamePrefs removeObjectForKey:@"mykey"];
[userNamePrefs setObject:@"myNewStringValue" forKey:@"mykey"];
Run Code Online (Sandbox Code Playgroud)
但它不起作用它不删除对象而忽略为键添加新值,请帮助我缺少什么
谢谢
我想,以节省indexPath为正在从删除的行UITableView成NSUSerDefaults.
但我得到以下异常:
Attempt to insert non-property value '<NSIndexPath 0x834cc00> 2 indexes [0,1]
Run Code Online (Sandbox Code Playgroud)
如何解决此问题并将数据保存到用户默认值中以便在其他方法中访问它?
我有一个JSON请求,返回不同的参数,例如名称.我想为name参数缓存一个变量,稍后我可以在app中查看.
例如:来自JSON request = david的名称.该变量称为firstname.firstname应该等于"david".应该存储名字,以便我可以在我的应用程序的所有部分中查看它.
我看到另一个类似的问题是一个解决方案是:
NSString *valueToSave = @"someValue";
[[NSUserDefaults standardUserDefaults]
setObject:valueToSave forKey:@"preferenceName"];
Run Code Online (Sandbox Code Playgroud)
并在以后取回它:
NSString *savedValue = [[NSUserDefaults standardUserDefaults]
stringForKey:@"preferenceName"];
Run Code Online (Sandbox Code Playgroud)
当我解析像这样的JSON文件时,如何使用此方法?:
@implementation Videos
@synthesize tableView = _tableView, activityIndicatorView = _activityIndicatorView, movies = _movies;
- (void)viewDidLoad
{
[super viewDidLoad];
self.title = @"Title";
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Menu"
style:UIBarButtonItemStylePlain
target:(DEMONavigationController *)self.navigationController
action:@selector(showMenu)];
NSString *valueToSave = @"TitleString";
[[NSUserDefaults standardUserDefaults]
setObject:valueToSave forKey:@"title"];
self.tableView.separatorColor = [UIColor clearColor];
// Setting Up Activity Indicator View
self.activityIndicatorView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
self.activityIndicatorView.hidesWhenStopped = YES;
self.activityIndicatorView.center = self.view.center; …Run Code Online (Sandbox Code Playgroud) 我发现由于未捕获的异常“ NSInternalInconsistencyException”而导致的“错误终止”应用程序,原因:“-[__ NSCFArray insertObject:atIndex:]:将变异方法发送给不可变对象”当我第二次将对象添加到可变数组时,第一次成功添加但第二次当它崩溃的应用程序,我认为当我添加对象到数组时有问题。下面的代码是崩溃。
- (void) viewWillAppear:(BOOL)animated
{
if ([defaults objectForKey:@"Groups"] != nil)
{
NSLog(@"not nil defaults.");
arrGroups = (NSMutableArray *)[defaults objectForKey:@"Groups"];
}
else
{
NSLog(@"nil defaults.");
arrGroups = [[NSMutableArray alloc] init];
}
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
NSLog(@"button index == %ld",(long)buttonIndex);
//txtCategory = [[alertView textFieldAtIndex:0] text];
if (buttonIndex == 1)
{
//[self addingCategory:self];
NSLog(@"Adding Group name = %@",[[alertView textFieldAtIndex:0]text]);
[arrGroups addObject:[[alertView textFieldAtIndex:0]text]]; **//Crash here! at the time of add second object or also when …Run Code Online (Sandbox Code Playgroud) 最近我正在学习NSUserDefaults,然后做了如下演示:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSMutableArray *activity_array = [NSMutableArray array];
NSMutableArray *movie_array = [NSMutableArray array];
[defaults setObject:activity_array forKey:@"activity"];
[defaults setObject:movie_array forKey:@"movie"];
[defaults synchronize];
Run Code Online (Sandbox Code Playgroud)
然后我尝试编写以下内容,我将在这篇文章的持续时间内调用"code2":
NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
NSMutableArray *array = [userDefault objectForKey:@"activity"];
[array addObject:@"123"];
Run Code Online (Sandbox Code Playgroud)
演示仍然有效.
但是当我用以下代码替换"code2"时,演示崩溃了:
NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
NSMutableArray *array = [userDefault objectForKey:@"movie"];
[array addObject:@"123"];
Run Code Online (Sandbox Code Playgroud)
如您所见,差异是关键.
为什么会崩溃?
我当前的类有大约50行只是编码和解码变量,以便我的类与NSUserDefaults兼容.有没有更好的方法来处理这个?
例:
init(coder aDecoder: NSCoder!) {
lightEnabled = aDecoder.decodeBoolForKey("lightEnabled")
soundEnabled = aDecoder.decodeBoolForKey("soundEnabled")
vibrateEnabled = aDecoder.decodeBoolForKey("vibrateEnabled")
pulseEnabled = aDecoder.decodeBoolForKey("pulseEnabled")
songs = aDecoder.decodeObjectForKey("songs") as! [Song]
currentSong = aDecoder.decodeIntegerForKey("currentSong")
enableBackgroundSound = aDecoder.decodeBoolForKey("enableBackgroundSound")
mixSound = aDecoder.decodeBoolForKey("mixSound")
playSoundInBackground = aDecoder.decodeBoolForKey("playSoundInBackground")
duckSounds = aDecoder.decodeBoolForKey("duckSounds")
BPMBackground = NSKeyedUnarchiver.unarchiveObjectWithData(aDecoder.decodeObjectForKey("BPMBackgorund") as! NSData) as! UIColor!
BPMPulseColor = NSKeyedUnarchiver.unarchiveObjectWithData(aDecoder.decodeObjectForKey("BPMPulseColor") as! NSData) as! UIColor!
TempoBackGround = NSKeyedUnarchiver.unarchiveObjectWithData(aDecoder.decodeObjectForKey("TempoBackGround") as! NSData) as! UIColor!
TempoPulseColor = NSKeyedUnarchiver.unarchiveObjectWithData(aDecoder.decodeObjectForKey("TempoPulseColor") as! NSData) as! UIColor!
TimeBackGround = NSKeyedUnarchiver.unarchiveObjectWithData(aDecoder.decodeObjectForKey("TimeBackGround") as! NSData) as! UIColor!
TimeStrokeColor = NSKeyedUnarchiver.unarchiveObjectWithData(aDecoder.decodeObjectForKey("TimeStrokeColor") as! NSData) as! UIColor! …Run Code Online (Sandbox Code Playgroud) 我使用以下代码通过UserDefaults存储应用设置:
var appSettings: [String: String?] {
set { // On attempt to set new value for the dictionary
UserDefaults.standard.set(newValue, forKey: "AppSettings")
UserDefaults.standard.synchronize()
}
get { // On attempt to get something from dictionary
if let settings = UserDefaults.standard.array(forKey: "AppSettings") as? [String: String?] {
return settings
} else {
return [:]
}
}}
Run Code Online (Sandbox Code Playgroud)
但是行if let settings = UserDefaults.standard.array(forKey: "AppSettings") as? [String: String?]导致警告:
从“ [任何]?”演员表 无关类型“ [String:String?]”始终失败
有什么想法如何在UerDefaults中保存此词典?
nsuserdefaults ×10
ios ×6
objective-c ×5
iphone ×2
swift ×2
archiving ×1
cocoa ×1
json ×1
nsarray ×1
nscolor ×1
nsindexpath ×1
nsmenuitem ×1
nstimer ×1
save ×1
xcode ×1