我可以在iPhone应用程序中使用什么代码来获取和设置我写的另一个应用程序的设置?(最好使用NSUserDefaults)
我在我的app委托applicationDidFinishLaunching方法中有这个:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if([defaults objectForKey:@"AcceptTC"] == nil){
NSDictionary *appDefaults = [NSDictionary dictionaryWithObject:@"NO" forKey:@"AcceptTC"];
[defaults registerDefaults:appDefaults];
}
Run Code Online (Sandbox Code Playgroud)
我在RootViewController viewDidLoad方法中有这个:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if(![defaults boolForKey:@"AcceptTC"]){
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Notice" message:@"By using this application you agree to be bound by the Terms and Conditions as stated within this application." delegate:self cancelButtonTitle:@"No Deal" otherButtonTitles:@"I Understand",nil];
[alert show];
[alert release];
}
Run Code Online (Sandbox Code Playgroud)
和我的警报视图委托这样做:
if(buttonIndex == 0){
exit(0);
}
else{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:@"YES" …Run Code Online (Sandbox Code Playgroud) 这只是我害怕的事情.我知道当你删除应用程序时,数据NSUserDefaults会被删除.当用户更新时会发生这种情况吗?在这种情况下,我应该将默认数据备份到另一台服务器/系统.
谢谢你们,试着采取预防措施.
可以UILocalNotification存放NSUserDefaults吗?
我试图获取值但它总是返回null.
这是尝试获取值的方法
-(IBAction)doneClicked:(id)sender
{
NSUserDefaults *prefx = [NSUserDefaults standardUserDefaults];
UILocalNotification *oldNotifObj = [prefx objectForKey:@"NotificationObject"];
NSLog(@"oldNotifObj = %@",oldNotifObj);
NSLog(@"enable notification");
if (oldNotifObj == nil)
{
[self addNotification];
NSLog(@"add a new one");
}
else
{
//if notification exist, remove old one, and add new one.
[self removeNotification:oldNotifObj];
[prefx setObject:nil forKey:@"NotificationObject"];
[self addNotification];
NSLog(@"remove old notification and add a new one");
}
}
Run Code Online (Sandbox Code Playgroud)
这是addNotification方法
-(void)addNotification
{
//set the notification
UILocalNotification *localNotif = [[UILocalNotification alloc]init];
localNotif.fireDate = …Run Code Online (Sandbox Code Playgroud) 我试图在NSUserDefaults中存储我的游戏的当前级别,但是当我尝试将其转换为int时它总是返回1.这是测试代码:
[[NSUserDefaults standardUserDefaults] setInteger:34 forKey:@"Current Level"];
NSLog(@"default level raw: %@", [[NSUserDefaults standardUserDefaults] objectForKey:@"Current Level"]);
self.levelNum = [[[NSUserDefaults standardUserDefaults] objectForKey:@"Current Level"] intValue];
NSLog(@"default level num: %i", self.levelNum);
Run Code Online (Sandbox Code Playgroud)
并输出:
default level raw: 34
default level num: 1
Run Code Online (Sandbox Code Playgroud) 我想保存一些用户首选项,但是
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
Run Code Online (Sandbox Code Playgroud)
回来nil.
iOS-Developper Library说,这应该返回现有的共享默认对象,如果不存在则创建一个...我缺少什么?
我也使用Appirater,所有这些东西似乎也不起作用......
当用户按下按钮时会调用此代码...
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
int index = ([defaults integerForKey:@"BackgroundColorSpecifier"]+ 1)%self.backgroundColors.count;
[defaults setInteger:index forKey:@"BackgroundColorSpecifier"];
[defaults synchronize];
Run Code Online (Sandbox Code Playgroud)
这被调用了 application: didFinishLaunchingWithOptions:
NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults];
[standardDefaults registerDefaults:@{@"BackgroundColorSpecifier": @0}];
[standardDefaults synchronize];
Run Code Online (Sandbox Code Playgroud)
当我调试此代码片段时,绿色的"位置指示器"以非常奇怪的方式跳转...
我没有任何线索,最新情况......请帮忙!
我试图增加这样的NSInteger使用NSUserDefaults:
NSInteger attempts = [[NSUserDefaults standardUserDefaults]integerForKey:@"tries"];
NSInteger newA = attempts++;
[[NSUserDefaults standardUserDefaults]setInteger:newA forKey:@"tries"];
[[NSUserDefaults standardUserDefaults]synchronize];
NSLog(@"Tries: %d",[[NSUserDefaults standardUserDefaults]integerForKey:@"tries"]);
Run Code Online (Sandbox Code Playgroud)
不过这是我的NSLogs:
Tries: 0
Tries: 0
Tries: 0
Run Code Online (Sandbox Code Playgroud) 许多在线教程似乎赞成使用if-let或guard-let语句从UserDefaults中检索可选值.这有意义吗?我读到Apple打算让我们立即为UserDefaults提供默认值.
使用guard语句安全地解包这些值会导致更多代码,如果您的应用程序立即初始化这些值,这似乎是多余的.从UserDefaults强制解包值是否有任何缺点?
我经常制作游戏应用程序来保存游戏分数,并显示如下所示的排名.(它从不使用任何服务器.用户可以在app中查看自己的游戏分数.)
rank level score
1st level 99 9999
2nd level 87 8875
3rd level 87 8875
4th level 64 6938
5th level 3 320
...
Run Code Online (Sandbox Code Playgroud)
当我实现这样的排名时,我总是使用如下所示的多维数组.
rankArray
level score
[0] [0] //1st
[1] [1] //2nd
[2] [2] //3rd
//[0] = 99, 9999
//[1] = 87, 8875
Run Code Online (Sandbox Code Playgroud)
但如果您知道更好的排名方式,请告诉我.
我有UITable来展示不同的动物.在表中选择单元格时,将推送具有大UIImage的新视图控制器.目前,当您放大图像时,UIAlertView会触发a 询问用户是否要下载高分辨率图像.如果他们单击是,则"hi-res-flag"在用户默认值中设置为"yes",并且他们不再看到弹出窗口.但是,如果他们选择"否",则每次放大照片时,高分辨率标志将继续弹出.
相反,如果他们回答否,我想偶尔弹出这个标志.不是每次单击物种表中的单元格,也不是每次打开应用程序时.更像是一个月一次或两次.有没有办法在iOS应用程序的逻辑中使用时间?例如,在用户默认值中删除为"high-res-flag"设置的值(如果已经等于'no'),每月一次?
nsuserdefaults ×10
ios ×7
objective-c ×5
iphone ×3
swift ×2
xcode ×2
appirater ×1
ios7 ×1
nsinteger ×1
settings ×1
uialertview ×1