Ios 如何实现NSUserDefault以通过多个视图访问
我正在尝试在多个视图中共享字符串和整数,这是一个介绍性的iOS开发课程的最后一个项目,大约50个,我想知道我将如何做到这一点。。。我知道MVC模式是最好的,但我们没有得到非常先进的东西,尤其是核心数据。我在考虑使用NSUserDefaults,我知道这是错误的,但这个应用程序不必太快,我认为这对我来说是最简单的方法。我的问题是,在哪里以及如何声明我将使用的NSUserDefault对象?我们在课堂上唯一一次使用它是在一个视图中。如果我在加载的第一个视图中声明它,我知道我可以使用其他视图访问它,但是我是否需要将第一个视图的头文件导入到其他视图中,或者不管如何都可以访问它Ios 如何实现NSUserDefault以通过多个视图访问,ios,ipad,nsuserdefaults,multiple-views,data-sharing,Ios,Ipad,Nsuserdefaults,Multiple Views,Data Sharing,我正在尝试在多个视图中共享字符串和整数,这是一个介绍性的iOS开发课程的最后一个项目,大约50个,我想知道我将如何做到这一点。。。我知道MVC模式是最好的,但我们没有得到非常先进的东西,尤其是核心数据。我在考虑使用NSUserDefaults,我知道这是错误的,但这个应用程序不必太快,我认为这对我来说是最简单的方法。我的问题是,在哪里以及如何声明我将使用的NSUserDefault对象?我们在课堂上唯一一次使用它是在一个视图中。如果我在加载的第一个视图中声明它,我知道我可以使用其他视图访问它,但
更新
因此,我想我应该在所有的
ViewControllers
中设置NSUserDefaults
属性,让事情变得更简单。然后,为了尝试返回值,我将每个ViewControllers
中的头实现到需要访问存储在NSUserDefaults中的数据的视图中(该视图还具有NSUserDefaults
属性)。这个应用程序运行得非常好,直到我进入那个屏幕,没有任何更新。我确信我的错误在于如何实现NSUserDefaults
,但我不确定如何正确实现它。当我们在课堂上检查它们时(实际上这是一项针对“Sam’s Teach Yourself iPhone Application Development in 24小时”(呕吐,让我很愤怒)的指导性研究),我们唯一一次使用它们是在一个单视图应用程序中,它改变了白色背景的alpha,因此可以用作闪光灯。它是这样呈现的:
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setInteger: var forKey: kVar];
[userDefaults synchronize];
这就是我在我的应用程序中尝试的:
在myViewController.h
文件中,每个视图:
然后,当我单击一个按钮时,我想将该值保存到userDefaults
:
很抱歉,你们试图向我解释的内容显然完全超出了我的理解范围,而且我的命名约定有点混乱,但我已经连续15个小时在这方面工作了,几乎没有休息,现在是凌晨4点左右在明尼苏达州。我该怎么办?我也很抱歉,它可能需要明确说明如何实现它。没有什么需要“声明”的。每次你说
[NSUserDefaults standardUserDefaults]
你都在访问用户默认值,不管你从哪里说。如果需要设置默认值(即某些键的初始值),请在程序中尽早设置,例如在应用程序代理的applicationdFinishLaunching
中,通过调用registerDefaults
NSUserDefaults
的好处是,您不需要在任何地方实例化它:它已经可以从应用程序中的任何地方访问。只需调用[NSUserDefaults standardUserDefaults]
,并读取或写入该对象即可。调用对象上的synchronize
,确保更改存储在磁盘上,然后在下一个检索standardUserDefaults
对象的位置,它将具有更新的信息
编辑:根据上述代码,您可以进行以下更改以使用标准用户默认对象:
- (void)viewDidLoad
{
[super viewDidLoad];
self.userDefaults = [NSUserDefaults standardUserDefaults];
}
@property(assign)NSUserDefaults用户默认值
和您的成员变量NSUserDefaults userDefaults代码>
NSUserDefaults*userDefaults=[NSUserDefaults standardUserDefaults]代码>
@属性
设置为标准用户默认值对象,这样就不必通过调用标准用户默认值
来检索它(因为您似乎经常使用它,这可能是您应该采取的方法)
要这样做:
@属性
,但将其设置为(保留)
,而不是(分配)
(标准用户默认值
对象是自动释放
d,因此您需要自己保留它)。(可选)您可以删除NSUserDefaults用户默认值代码>行,因为@属性无论如何都会为您创建该行
viewdiload
中,就像我在这里所做的那样),将userDefaults
变量设置为标准用户默认对象:
- (void)viewDidLoad
{
[super viewDidLoad];
self.userDefaults = [NSUserDefaults standardUserDefaults];
}
dealloc
用于init
方法,或viewDidLoad
用于viewDidLoad
):
如果您经常使用
NSUserDefaults
,那么为自己创建一个类别可能会很方便,以确保您的密钥中不会出现打字错误。例如,假设我不断地获取和设置值,让编译器进行一些检查以确保我没有键入错误的键是很方便的,当然我们都喜欢自动完成
// NSUserDefaults+PSProperties.h
@interface NSUserDefaults (PSProperties)
@property (nonatomic, assign) NSInteger ps_myInteger;
@end
// NSUserDefaults+PSProperties.m
NSString * const PSKeyMyInteger = @"PSKeyMyInteger";
@implementation NSUserDefaults (PSProperties)
- (NSInteger)ps_myInteger;
{
return [self integerForKey:PSKeyMyInteger];
}
- (void)setPs_myInteger:(NSInteger)ps_myInteger;
{
[self setInteger:ps_myInteger forKey:PSKeyMyInteger];
}
@end
因此,在使用用户默认值的其他类中,我可以执行以下操作:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
defaults.ps_myInteger = 5;
[defaults synchronize];
NSLog(@"%i", defaults.ps_myInteger);
> 2011-12-14 01:10:28.041 SampleUserDefaults[5356:f803] 5
现在所有的键都被隐藏了,我使用与我的应用程序相关的更好的API与
NSUserDefaults
进行交互。你能举例说明如何做到这一点吗?我已经尝试了我能想到的一切,并在我的更新中记录了它,但仍然没有运气。
- (void)viewDidUnload
{
self.userDefaults = nil;
}
// NSUserDefaults+PSProperties.h
@interface NSUserDefaults (PSProperties)
@property (nonatomic, assign) NSInteger ps_myInteger;
@end
// NSUserDefaults+PSProperties.m
NSString * const PSKeyMyInteger = @"PSKeyMyInteger";
@implementation NSUserDefaults (PSProperties)
- (NSInteger)ps_myInteger;
{
return [self integerForKey:PSKeyMyInteger];
}
- (void)setPs_myInteger:(NSInteger)ps_myInteger;
{
[self setInteger:ps_myInteger forKey:PSKeyMyInteger];
}
@end
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
defaults.ps_myInteger = 5;
[defaults synchronize];
NSLog(@"%i", defaults.ps_myInteger);
> 2011-12-14 01:10:28.041 SampleUserDefaults[5356:f803] 5