从另一个VC

时间:2017-07-23 15:38:56

标签: ios objective-c nsuserdefaults keychain

标题可能有点令人困惑,抱歉。我会尽量保持问题的简短,但提供问题的代码和示例。

我有一个具有登录功能的应用。登录时,我向我的数据库发出请求并解析响应,然后为我的account对象设置值(例如名称,密码等)。我正在使用UYLPasswordManager在iOS Keychain中存储值。这是我的电子邮件的setter / getter示例(所有其他属性setter / getter使用相同的代码):

- (void)setUsername:(NSString *)username {
    UYLPasswordManager *keyManager = [UYLPasswordManager sharedInstance];
    [keyManager registerKey:username forIdentifier:AccountDataUsernameIdentifier];
}

- (NSString *)username {
    UYLPasswordManager *keyManager = [UYLPasswordManager sharedInstance];
    return [keyManager keyForIdentifier:AccountDataUsernameIdentifier];
}

保存在钥匙串中后,我为save课程调用AccountData函数,将值保存到NSUserDefaults,如下所示:

[[NSUserDefaults standardUserDefaults] setObject:self.username forKey:AccountDataUsernameKey];
[[NSUserDefaults standardUserDefaults] synchronize];

因此,在登录时,典型流程会解析数据响应并创建NSDictionary,然后我可以开始设置account.username = dict[@"username"]和其他值,然后调用[account save]以保存到钥匙串和NSUserDefaults

这适用于现有的account属性。但我现在想要存储一个电子邮件地址(如果我的数据库中存在)。所以一切都和以前一样 - 从服务器解析,检查字典是否包含email的值,如果它是空的那么我以模态方式呈现视图控制器。然后用户可以输入他们的电子邮件并提交我向我的数据库发出请求,将电子邮件保存到数据库,然后我需要将其存储在iOS中。这就是问题所在。

当用户提交时,会向他们显示成功的提醒,点击“确定”会取消视图,应用会继续正常进行。 AlertAction调用一个方法设置account.email = self.emailString(从文本字段设置),然后我调用[account save],它应该在我的AccountData对象类中保存该帐户的所有属性。

- (void)setEmailAddressForAccount:(AccountData *)account {
if (!account.email) {
    [account setEmail:self.emailString];

    // Present successful update alert
...
    [account save]; // this is in the UIAlertAction handler, when user taps OK

setEmail:email完成存储到iOS钥匙串后,我可以在设置器的末尾打印self.email,它是nil。但是发送的字符串不是nil。然后,这会在调用nil时为电子邮件设置[account save]值。此方法将我的所有值保存到NSUserDefaults,这是电子邮件的值:

[[NSUserDefaults standardUserDefaults] setObject:self.email forKey:AccountDataEmail];

如果我设置断点并在self.email方法中打印[account save],则为零。所有其他属性设置正确,不是零。我可以在需要的任何地方设置/获取account对象的值,但email始终为nil

注意:AccountData对象具有reloadAccount方法,该方法可以在新的account对象中进行 - 在登录/电子邮件捕获过程中会被调用几次。这会导致这个问题吗?在登录过程中有时候有两个account对象的实例。

拜托,有人可以帮助我,我会感到沮丧,因为我的代码似乎只需要很长时间才能实现,并且不应该让我这么头疼。

0 个答案:

没有答案