ios - 如何创建登录条件和核心数据表值不能存储两次

标签 ios objective-c iphone core-data

我的项目有问题。我的移动应用程序的登录表单附加到 PHP 登录服务并且表现良好。我还添加了核心数据。在核心数据表中,登录表单的用户id文本字段和密码文本字段及其在本地数据库中的数据存储,正常工作。

但是我想,当用户第一次登录时,值存储在本地数据库值存储中,当用户从这里注销时,第二次用户使用相同的登录 ID 和密码登录时,数据库无法记录两次。

显然,我希望值不能存储两次。请建议它是如何工作的。

我的代码

- (IBAction)btn_action:(id)sender {
   if([[self.tx_userid text] isEqualToString:@""] || [[self.tx_password text] isEqualToString:@""] ) {
    
    } 
   else {
    
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"MYURL"]];
    
    
    //create the Method "GET" or "POST"
    [request setHTTPMethod:@"POST"];
    
    
    //Pass The String to server(YOU SHOULD GIVE YOUR PARAMETERS INSTEAD OF MY PARAMETERS)
    NSString *userUpdate =[NSString stringWithFormat:@"loginid=%@&loginpassword=%@",_tx_userid.text,_tx_password.text, nil];
    
    
    
    //Check The Value what we passed
    NSLog(@"the data Details is =%@", userUpdate);
    
    //Convert the String to Data
    NSData *data1 = [userUpdate dataUsingEncoding:NSUTF8StringEncoding];
    
    //Apply the data to the body
    [request setHTTPBody:data1];
    
    //Create the response and Error
    NSError *err;
    NSURLResponse *response;
    
    NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&err];
    
    //  if ([response statusCode] >= 200 && [response statusCode] < 300)
    {
        
        
        NSError *error = nil;
        NSDictionary *jsonData = [NSJSONSerialization
                                  JSONObjectWithData:responseData
                                  options:NSJSONReadingMutableContainers
                                  error:&error];
        
        int success = [jsonData[@"success"] integerValue];
        
        
        if(success == 1)
        {
            // stored in local DB
            NSManagedObjectContext *context = [self managedObjectContext];
            
            NSManagedObject *newDevice = [NSEntityDescription insertNewObjectForEntityForName:@"Loginuser" inManagedObjectContext:context];
            
            [newDevice setValue:self.tx_userid.text forKey:@"userid"];
            [newDevice setValue:self.tx_password.text forKey:@"password"];
            
            NSError *error = nil;
            // Save the object to persistent store
            if (![context save:&error]) {
                NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]);
            }

            NSLog(@"Login SUCCESS");
            [self performSegueWithIdentifier:@"login_success" sender:self];
        } else {
            
            NSString *error_msg = (NSString *) jsonData[@"error_message"];
            [self alertStatus:error_msg :@"Sign in Failed!" :0];
        }
        
    }
    
}




NSLog(@"app dir: %@",[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]);


  }

 - (void) alertStatus:(NSString *)msg :(NSString *)title :(int) tag
{
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:title
                                                    message:msg
                                                   delegate:self
                                          cancelButtonTitle:@"Ok"
                                          otherButtonTitles:nil, nil];
alertView.tag = tag;
[alertView show];
 }

最佳答案

首先您检查登录 ID 是否与用户登录时存储的所有登录 ID 不同。 当它相同时,用户允许登录而不存储数据,否则先存储数据,然后允许登录。

关于ios - 如何创建登录条件和核心数据表值不能存储两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39768207/

相关文章:

iPhone 通过蓝牙连接到 RS-232

javascript - IOS 10.3.3 Iphone Safari beforeunload, unload, pagehide 不起作用

ios - SnapKit更新约束导致冲突

ios - 如果 let 不解包 MKAnnotation 的 title 属性的可选值

ios - 如何将CCMenu添加到CCSpriteBatchNode?

ios - 为什么 NSArray 有 indexOfObjectPassingTest 方法而不是像 NSSet 那样的 objectsPassingTest?

ios - Metal (iOS) 中的多重采样/锯齿状边缘

objective-c - 我的应用程序可以使用多少内存?或者什么是通常的?

iphone - 如何在 iOS 视网膜和非视网膜屏幕底部放置 admob 横幅

iphone - 即使验证失败,Core Data 也会保存对象