如何避免 Parse iOS 中的数据重复?

Posted

技术标签:

【中文标题】如何避免 Parse iOS 中的数据重复?【英文标题】:How to avoid Data Duplication in Parse iOS? 【发布时间】:2015-02-11 08:54:10 【问题描述】:

我是使用 Parse 的 ios 新手,我制作了一个包含 Facebook 登录的应用程序,如果用户已经登录,我想制作,然后我将其数据放入我的 Parse Data 表中,如

PFObject *userInfo = [PFObject objectWithClassName:@"User"];
        userInfo[@"email"]=self.email;
        userInfo[@"name"]=self.username;
        [userInfo saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error)
         
             if (succeeded)
             
                 NSLog(@"Do whatever you want to Do");
             
             else
                 NSString *errorString = [[error userInfo] objectForKey:@"error"];
                 NSLog(@"Error: %@", errorString);
             

         ];

但它包含每个相同用户的重复数据,所以我为此编写了一个代码

PFQuery *query = [PFQuery queryWithClassName:@"User"];
[query whereKey:@"name" equalTo:self.username];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error)

    NSLog(@"%@",objects);
    if ([objects containsObject:self.username])
    
        NSLog(@"Successfully retrieved: %@", objects);
    
    else
    
        PFObject *userInfo = [PFObject objectWithClassName:@"User"];
        userInfo[@"email"]=self.email;
        userInfo[@"name"]=self.username;
        [userInfo saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error)
         
             if (succeeded)
             
                 NSLog(@"Do whatever you want to Do");
             
             else
                 NSString *errorString = [[error userInfo] objectForKey:@"error"];
                 NSLog(@"Error: %@", errorString);
             

         ];
        ];

但它的工作方式与上面相同,在这里我想如果用户已经登录,那么它的数据不会每次都插入到表中。 请给我解决方案。

【问题讨论】:

您是要不保存重复的用户还是要不保存重复的对象?我对您的示例解析已经有一个您不需要手动管理的用户系统感到困惑。 【参考方案1】:

我不知道您要做什么,但似乎您正在尝试创建自己的用户对象。我会改用内置的。链接到文档。加上下面的 facebook 使用它的简单示例。它不包括所有内容。 https://www.parse.com/docs/ios/guide#users-logging-in

NSArray *permissions = @[kLoginPermissionPublicProfile, kLoginPermissionEmail, kLoginPermissionFitness, kLoginPermissionBirthday];

if ([PFUser currentUser] == nil) 
    if(facebookSignin)
        [PFFacebookUtils logInWithPermissions:permissions block:^(PFUser *user, NSError *error) 
            //Pull any facebook data and save it
        ];
    else if(signUp)
        PFUser *user = [PFUser user];
        user.username = email;
        user.password = password;
        user.email = email;

        [user signUpInBackgroundWithBlock:^(BOOL success, NSError* error)
            //add data and save it
        ];
    else
        [PFUser logInWithUsernameInBackground:email password:password block:^(PFUser* user, NSError* error) 
            if (!error) 
                if (user) 
                    //add data and save it
                
            
        ];
    
else
    PFUser *user = [PFUser currentUser];
    user[@"phone"] = @"415-392-0202";
    [userInfo saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error)
        //ToDo
    ];

【讨论】:

以上是关于如何避免 Parse iOS 中的数据重复?的主要内容,如果未能解决你的问题,请参考以下文章

Parse 的 iOS SDK(或其他 SDK)如何解决冲突?

mpandroidchart - 如何避免 Y 轴中的重复值?

如何避免 writeToBq 步骤中数据流束管道中的重复?

如何构建数据库以避免表中的重复

如何避免 Postgres 数据库中的重复条目?条目包含不同的值

高并发下如何避免产生重复数据?