存储和检索值我有两个文件,即APIRequest.m
和LoginController.m
。碰撞发生时,从nsuserdefaults
APIRequest.m文件有一个包含以下代码的receiveLoginData方法。状态码将从服务器接收。如果证书都是正确的,状态码将是1 else 0.我将它保存到NSUserDefaults如下。
第一块码:
- (void)receivedLoginData:(NSData *)data
{
//NSString* newStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
// NSLog(@"%@",newStr);
NSError *localError = nil;
self.parsedObject = [NSJSONSerialization JSONObjectWithData:data options:0 error:&localError];
NSString* loginResponse = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSData *jsonData = [loginResponse dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *jsonDic = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingAllowFragments error:nil];
NSString *statusCode = [NSString stringWithFormat:@"%@",jsonDic[@"status"]];
self.statusCode = [NSString stringWithFormat:@"%@",jsonDic[@"status"]];
// NSLog(@"Setting is %@", self.statusCode);
// NSLog(@"%@",loginResponse);
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[prefs setObject:statusCode forKey:@"statusCode"];
[prefs synchronize];
}
LoginController中得到了下面的代码。在这里我尝试通过调用[self.request loginValidation];
if (([self.request.usernameText isEqualToString:@""] && [self.request.passwordText isEqualToString:@""]) || ([self.request.usernameText isEqualToString:self.usernameTextField.text] && [self.request.passwordText isEqualToString:@""]) || ([self.request.usernameText isEqualToString:@""] && [self.request.passwordText isEqualToString:self.passwordTextField.text]))
{
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"" message:@"Username or Password cant be left empty." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
[alert show];
[self performSelector:@selector(select) withObject:self.request afterDelay:.1];
} else{
[self.request loginValidation];
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
NSString* strValue = [defaults objectForKey:@"statusCode"];
NSLog(@"code %@",strValue);
}
第一次检索的NSUserDefaults的时候的StatusCode我运行应用程序,并提供正确的登录凭据,状态码被设置在APIRequest.m文件是1,因此它得到检索时,值仍然是1.
第二次我尝试给出错误的登录凭据,因此在APIRequest.m文件中设置的状态代码为0,但是当它获取时,值仍然是1.我怎样才能解决这个冲突?
请勿在您的应用程序中使用NSUserDefaults进行通信。而是调用另一个类的方法或使用NSNotificationCenter。 – Paulw11
你能否提供一些参考我的代码的代码? – user1241241
不是真的,因为我不完全确定你所显示的代码发生了什么,我怀疑'loginValidation'是异步完成的,所以你需要完成块来发布通知,或者你可以提供一个完成块给'loginValidation '方法。 – Paulw11