我想知道指南的用途:
1 - 我多久可以从NSUserDefaults中读取
2 - 我可以在NSUserDefaults中合理存储多少数据
显然,NSUserDefaults可以使用多少是有限的,但我无法确定什么是合理的,什么不是.
其中一些例子:
如果我的游戏有一个选项让计算机成为其中一个玩家,我将使用NSUserDefaults来保存该布尔值.这很清楚.但是,每当我想知道计算机是否是一个播放器或我是否应该使用实例变量时,在我的游戏中访问NSUserDefaults也是合理的吗?假设我需要每秒检查一次布尔值.答案是否相同是100毫秒而不是?每10秒钟一次呢?
如果我的游戏有50个移动物体,并且我希望在用户退出应用程序时存储它们的位置和速度,那么NSUserDefaults是一个存储该数据的合理位置吗?20个移动物体怎么样?200怎么样?
我有一个奇怪的问题与Tiny Wings的错误修正.在我的游戏中我使用的东西如下:
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setFloat:musicVolume forKey:@"musicVolume"];
Run Code Online (Sandbox Code Playgroud)
用于保存一些首选项和高分表.在游戏结束时,当游戏画面出现时,游戏将高分保存到standardUserDefaults.它运行良好,直到游戏显示如下的UIAlertView:
UIAlertView *alert = [[UIAlertView alloc] init];
[alert setTitle:@"Get ready!"];
[alert setDelegate:self];
[alert addButtonWithTitle:@"Ok"];
[alert show];
[alert release];
Run Code Online (Sandbox Code Playgroud)
之后,AlertView消失每次游戏保存财产以后一会儿游戏滞后(在几秒钟一些设备)的standardUserDefaults.在游戏使用UITextField输入玩家名称后也会发生这种情况.在使用两个UIKit Elements中的一个之前游戏中没有任何延迟,但在使用它们之后游戏会延迟直到我重新启动应用程序.我用性能工具分析了这个问题,"I/O活动"仪器显示有数百个"开放 - 读取 - 关闭"访问
/System/Library/Frameworks/UIKit.framework/InputModeProperties.plist
Run Code Online (Sandbox Code Playgroud)
这导致了滞后.
我完全不知道该怎么做.有任何想法吗?
编辑:
苹果开发者论坛http://devforums.apple.com/message/424374#424374中有一个帖子,其中有人有同等的问题,似乎它只出现在iOS 4.3中.我已经测试了它,而且仅在我的4.3设备上发生了滞后(不是在3.1 iPod Touch和4.2 iPad上).
如何nsuserdefault在swift中自动清除值?我已经尝试了这个,但它对我不起作用......
[[NSUserDefaults standardUserDefaults] setPersistentDomain:[NSDictionary dictionary] forName:[[NSBundle mainBundle] bundleIdentifier]];
Run Code Online (Sandbox Code Playgroud) 我在日志中收到一些错误消息
[User Defaults] Failed to write value for key GameId in CFPrefsPlistSource<0x1740faf00> (Domain: xxx.xxxxxx, User: kCFPreferencesCurrentUser, ByHost: No, Container: (null)): Path not accessible, switching to read-only
[User Defaults] attempt to set <private> for key in <private> in read-only (due to a previous failed write) preferences domain CFPrefsPlistSource<0x1740faf00> (Domain: xxx.xxxxxx, User: kCFPreferencesCurrentUser, ByHost: No, Container: (null))
Run Code Online (Sandbox Code Playgroud)
是什么导致这个?
这就是我的用法NSUserDefaults:
- (NSString *)gameId
{
if (_gameId)
return _gameId;
_gameId = [[NSUserDefaults standardUserDefaults] objectForKey:@"GameId"];
return _gameId;
}
- (void)setGameId:(NSString *)aGameId
{
_gameId …Run Code Online (Sandbox Code Playgroud) 我创建了一个从settings.bundle设置和检索值的项目.我还在settings.bundle文件中设置了一些默认值.现在的问题是我将值检索为
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
loginName.text = [defaults objectForKey:@"login_name"];
Run Code Online (Sandbox Code Playgroud)
它第一次显示为null,但是在iPhone应用程序设置中设置了值.如果我更改值或手动设置它,则可以正确检索值.
帮帮我
我有一个应用程序存储NSUSERDEFAULTS中的用户ID和代码我需要使用这些值,以便让UIWebView访问url:www.mywebsite.com/check.php?id =(urhere)&code =(ifhere).
我已经看了一些其他主题,但到目前为止似乎没有任何帮助.
我是这种语言的新手,所以感谢您的耐心等待.
杰克布朗
嗨我正在尝试从餐馆对象创建一个fourates列表,我的应用程序有一个不同的餐厅列表,我希望能够为用户添加有利的餐厅,这个代码不起作用
- (IBAction)toggleFav:(id)sender {
Restaurant *resto = [self restaure];
NSMutableDictionary *dic = [[NSMutableDictionary alloc] init];
[dic setObject:resto.price forKey:@"restoPrice"];
[dic setObject:resto.restaurantId forKey:@"restaurantId"];
[dic setObject:resto.restoAbout forKey:@"restoAbout"];
[dic setObject:resto.restoAddress forKey:@"restoAddress"];
[dic setObject:resto.restoBeverages forKey:@"restoBeverages"];
[dic setObject:resto.restoCategory forKey:@"restoCategory"];
[dic setObject:resto.restoEmail forKey:@"restoEmail"];
[dic setObject:resto.restoLogo forKey:@"restoLogo"];
[dic setObject:resto.restoName forKey:@"restoName"];
[dic setObject:resto.restoPhone forKey:@"restoPhone"];
[dic setObject:resto.restoCity forKey:@"restoCity"];
NSArray *dicArray = [dic allKeys];
if([sender isSelected]){
//...
[sender setSelected:NO];
NSMutableArray *array = [[[NSUserDefaults standardUserDefaults] objectForKey:@"restoName"] mutableCopy];
[array removeObject:dicArray];
[[NSUserDefaults standardUserDefaults] setObject:array forKey:@"restoName"];
} else {
//...
[sender setSelected:YES];
NSMutableArray *array = …Run Code Online (Sandbox Code Playgroud) 我正在做一个基本的测验应用程序.选择是以表格视图的形式.如果用户移动到上一个问题,我想向他显示他之前选择的选项.我已将选择存储在NSUserDefaults中.如何将此int值转换为NSIndexpath并在我的tableview中使用它?
在我的iOS项目中,我需要将整个JSON保存为用户数据,然后在下次应用程序启动时重新加载.将它分解为多个值,然后重新创建JSON不是一个选项,我只需要一些可序列化的方法来保存整个原始JSON.我尝试将其转换为String通过json.rawString()传递获取的string方式重新创建它JSON(string),但它不起作用.
我很惊讶于制作这么简单的事情的困难以及缺乏关于这样的在线事情的信息,所以我迫不及待地想要发现如何做到这一点:)
例:
public func saveJSON(j: JSON) {
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setValue(j.rawString()!, forKey: "json")
// here I save my JSON as a string
}
public func loadJSON() -> JSON {
let defaults = NSUserDefaults.standardUserDefaults()
return JSON(defaults.valueForKey("json") as! String))
// here the returned value doesn't contain a valid JSON
}
Run Code Online (Sandbox Code Playgroud) 如何知道是否NSUserDefaults包含任何值?如何检查其是否为空?
nsuserdefaults ×10
ios ×6
objective-c ×5
swift ×3
iphone ×2
cocoa ×1
cocoa-touch ×1
json ×1
limit ×1
nsindexpath ×1
options ×1
swift2 ×1
swifty-json ×1
uikit ×1
uiwebview ×1
url ×1
xcode ×1