iOS7 Xcode5 开关状态 NSUserDefaults
Posted
技术标签:
【中文标题】iOS7 Xcode5 开关状态 NSUserDefaults【英文标题】:iOS7 Xcode5 switch state NSUserDefaults 【发布时间】:2014-08-08 10:13:29 【问题描述】:我对 ios 很陌生,所以这是我的问题。我有一个表格视图(GuestTableViewController),列出了聚会中的一些客人。当我点击一个人时,我会显示一个新视图 (GuestInfoViewController),其中包含有关此与会者的一些信息。在这个视图中我有开关按钮,所以如果我有 3 个人,将有 3 个开关指示每个人是否来。
在我的 GuestInfoViewController 的 IBAction 中使用 NSUserDefaults 我已实现在视图之间保存其状态(开/关)。
问题是当我点击一个开关时,所有开关都会改变状态。如何引用每个开关。
注意:如果需要,我可以在故事板上发布图像,甚至可以发布一些代码。
非常感谢!
@implementation GuestInfoViewController
@synthesize nom,cognoms,foto;
@synthesize setNom,setCognoms,setFoto;
@synthesize mySwitch;
- (void)viewDidLoad
[super viewDidLoad];
nom.text = setNom;
cognoms.text = setCognoms;
[foto setImage:[UIImage imageNamed:setFoto]];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([defaults objectForKey:@"SwitchState"])
self.mySwitch.on = [defaults boolForKey:@"SwitchState"];
- (IBAction)switch:(id)sender
if(mySwitch.on)
NSLog(@"Switch is ON");
if(!mySwitch.on)
NSLog(@"Switch is OFF");
- (IBAction)saveSwitchState:(id)sender
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([self.mySwitch isOn])
[defaults setBool:YES forKey:@"SwitchState"];
else
[defaults setBool:NO forKey:@"SwitchState"];
@end
【问题讨论】:
您使用的是一个开关还是三个不同的开关? 单个视图中只有 1 个 好的,所以有 3 个视图和 3 个开关,对吗? 问题不清楚,希望您需要tag
属性。
是的,没错@MohitPopat
【参考方案1】:
您的代码对所有参与者使用相同的密钥 - 这是您应该注意的。
由于您显然为每个人设置了姓名(如果我们假设两个与会者的姓名不同),您可以利用这一点。
更改所有 @"SwitchState"
引用
类似
[NSString stringWithFormat:@"SwitchState_%@_%@",setNom,setCognoms]
这将有效地分别保存每个与会者的开关状态。
【讨论】:
【参考方案2】:按照您的思路,您需要在 NSUserDefaults 中存储 3 个键,每个人一个。例如,如果您有 1000 人,使用它会很麻烦。
我相信实现这一点的正确方法是在您的 GuestInfoViewController 上使用 Delegate。
我会这样做:
GuestTableViewController 有一个 Person 对象列表,Person 对象有一个 BOOL 用于选择或不选择。 GuestInfoViewController,读取 BOOL 值以显示开关,如果值更改,它会触发委托并更新 GuestTableViewController 中的列表。这样,所有内容都会更新,并且所有信息都正确无误。如果您在做委托时需要帮助,您可以在 *** 上找到一百万个示例。或者问,我会详细说明。
** 编辑 **
处理简单的 Person 对象时,您甚至不需要委托,它更简单。检查附件中的项目:http://www.brunotereso.net/temp/DelegateProject.zip(请注意,这只是我为向您展示如何执行此操作的一段代码。如果您实现了类似的东西,请查看 cellForRowAtIndexPath 并使用可重复使用的单元格)
【讨论】:
Person 对象非常合适,但我从加载在 GuestTableViewController 中的 plist 中获取信息。代表将如何在这里工作? 您可以从 plist 加载对象列表。我给你写个例子。 您可以加载到字典或数组中,加载后您可以对其进行迭代并创建对象列表。 ***.com/questions/7577479/… ,它添加了一些代码,但最后,你做对了 :) NSUserDefaults 如果非常有限。 我用示例项目和您需要的代码更新了答案。以上是关于iOS7 Xcode5 开关状态 NSUserDefaults的主要内容,如果未能解决你的问题,请参考以下文章