我对iOS很陌生,所以这是我的问题。我有一个表视图(GuestTableViewController)列出了聚会中的一些客人。当我点击一个人时,我会显示一个新视图(GuestInfoViewController),其中包含有关此与会者的一些信息。在这个视图中我有开关按钮,所以如果我有3个人,将有3个开关指示它们中的每一个是否来。
在我的GuestInfoViewController中的IBAction中使用NSUserDefaults我已经实现了在视图之间保存其状态(ON / OFF)。
问题在于,当我单击一个开关时,所有开关都会改变状态。如何引用每个开关。
注意:我可以在故事板上发布图像,甚至可以根据需要发布一些代码。
非常感谢你!
@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
答案 0 :(得分:0)
您的代码对所有与会者使用相同的密钥 - 这是您应该照顾的。
由于您显然为每个人设置了姓名(如果我们假设两名与会者不具有相同名称),您可以利用此优势。
更改所有@"SwitchState"
引用
类似
[NSString stringWithFormat:@"SwitchState_%@_%@",setNom,setCognoms]
这将有效地分别为每个与会者保存交换机的状态。
答案 1 :(得分:0)
使用您的思路,您需要在NSUserDefaults中存储3个密钥,每个人一个。如果你有1000个人,那么使用它会很麻烦。
我认为实现这一点的正确方法是在GuestInfoViewController上使用Delegate。
这就是我要做的事情:
这样,一切都会更新,所有信息都是正确的。如果您需要帮助来完成委托,您可以在Stackoverflow上找到一百万个示例。或者问一下,我会详细说明。
**编辑**
当处理一个简单的Person对象时,你甚至不需要一个委托,它更简单。在附件中检查项目:http://www.brunotereso.net/temp/DelegateProject.zip(请注意,这只是我用来向您展示如何操作的一段代码。如果您实现类似的内容,请查看cellForRowAtIndexPath并使用可重复使用的细胞)