Сохраните сотни PFObjects в облаке Parse

У меня есть приложение, в котором есть две таблицы разбора — «Пользователь» и «Темы». Теперь, что я хочу, так это то, что если какой-либо пользователь зарегистрируется, я хочу создать еще одну таблицу синтаксического анализа, в которой будет храниться некоторая информация, связанная с этим пользователем, и в теме говорится о прогрессе темы. Вот мой код -

- (IBAction)signUpFunction {
    [self.view endEditing:YES];
    NSString *fullName = self.nameTextField.text;
    NSString *username = self.usernameTextField.text;
    NSString *password = self.passwordTextField.text;
    NSString *email = self.emailTextField.text;
    if ([username length] == 0 || [password length] == 0 || [email length] == 0 || [fullName length] == 0) 
    {
        [[[UIAlertView alloc] initWithTitle:@"Missing Information"
                                message:@"Make sure you fill out all of the information!"
                               delegate:nil
                      cancelButtonTitle:@"ok"
                      otherButtonTitles:nil] show];
    }
    else {
        PFUser *newUser = [PFUser user];
        newUser.username = username;
        newUser.password = password;
        newUser.email = email;
        newUser[@"fullName"] = fullName;
        [newUser signUpInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
            if (error) {

                [[[UIAlertView alloc] initWithTitle:@"Error!"message:[error.userInfo objectForKey:@"error"] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil] show ];
            }
            else 
            {
                PFQuery *topicsQuery = [PFQuery queryWithClassName:@"Topic"];
                [topicsQuery findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error)       {
                    if (error) {
                            NSLog(@"Error: %@ %@", error, [error userInfo]);     
                    }
                    else {

                        for (unsigned int i = 0; i < objects.count; i++) {
                            PFObject *object = objects[i];
                            PFObject *topicProgressForUser = [PFObject objectWithClassName:@"QuizProgress"];
                            [topicProgressForUser setObject:[PFUser currentUser] forKey:@"user"];
                            [topicProgressForUser setObject:object forKey:@"topic"];

                            if ([object[@"fullAccess"] isEqualToString:@"Yes"]) {
                                [topicProgressForUser setObject:@"Free" forKey:@"purchased"];
                            } else {
                                [topicProgressForUser setObject:@"No" forKey:@"purchased"];
                            }
                            [topicProgressForUser setObject:0 forKey:@"questionsSolved"];
                            [topicProgressForUser setObject:0 forKey:@"attempts"];
                            [topicProgressForUser setObject:0 forKey:@"resultInPercentage"];
                            [topicProgressForUser setObject:@"Basic" forKey:@"achievement"];
                            [topicProgressForUser setObject:NO forKey:@"generateCertificate"];

                            [topicProgressForUser saveEventually];

                        }
                    }
                }]; // topic block

            }
        }]; // signup block
     }
}

Я не думаю, что использую правильный стандарт сохранения данных для анализа облака, сохраняя каждый pfobject по отдельности. Что делать, если во время сохранения объектов пропало интернет-соединение? Может ли кто-нибудь помочь мне в использовании правильного и быстрого подхода к сохранению нескольких данных pfobject в новую таблицу в облаке синтаксического анализа.


person Upendar Gareri    schedule 08.01.2015    source источник
comment
Проверьте документ, вы можете сохранять массивы PFObjects в одном запросе, это сделает вашу жизнь на 100% лучше, а ваши запросы будут считаться на 100000% лучше: D   -  person Gil Sand    schedule 08.01.2015
comment
Да, Зиль, ты прав. Я узнал о добавлении PFObjects в массив и последующем сохранении массива с помощью saveAllInBackground. Спасибо   -  person Upendar Gareri    schedule 08.01.2015


Ответы (2)


В вашем случае я бы посмотрел на методы класса saveAll, saveAllInBackground и т.д.

Я взял ваш код и изменил его так, как мне кажется наиболее целесообразным в данном случае. Дайте мне знать, если это работает:

- (IBAction)signUpFunction {
    [self.view endEditing:YES];
    NSString *fullName = self.nameTextField.text;
    NSString *username = self.usernameTextField.text;
    NSString *password = self.passwordTextField.text;
    NSString *email = self.emailTextField.text;
    if ([username length] == 0 || [password length] == 0 || [email length] == 0 || [fullName length] == 0) {
        [[[UIAlertView alloc] initWithTitle:@"Missing Information"
                                    message:@"Make sure you fill out all of the information!"
                                   delegate:nil
                          cancelButtonTitle:@"ok"
                          otherButtonTitles:nil] show];
    } else {
        PFUser *newUser = [PFUser user];
        newUser.username = username;
        newUser.password = password;
        newUser.email = email;
        newUser[@"fullName"] = fullName;
        [newUser signUpInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
            if (error) {
                [[[UIAlertView alloc] initWithTitle:@"Error!"message:[error.userInfo objectForKey:@"error"] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil] show ];
            } else {
                PFQuery *topicsQuery = [PFQuery queryWithClassName:@"Topic"];
                [topicsQuery findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
                    if (error != nil) {
                        NSLog(@"Error: %@ %@", error, [error userInfo]);
                    } else {
                        NSMutableArray *topics = [NSMutableArray array];
                        for (unsigned int i = 0; i < objects.count; i++) {
                            PFObject *object = objects[i];
                            PFObject *topicProgressForUser = [PFObject objectWithClassName:@"QuizProgress"];
                            [topics addObject:topicProgressForUser];
                            topicProgressForUser[@"user"]                   = [PFUser currentUser];
                            topicProgressForUser[@"topic"]                  = object;
                            topicProgressForUser[@"questionSolved"]         = @(NO);
                            topicProgressForUser[@"attempts"]               = @(0);
                            topicProgressForUser[@"resultInPercentage"]     = @(0);
                            topicProgressForUser[@"achievement"]            = @"Basic";
                            topicProgressForUser[@"generateCertificate"]    = @(NO);
                            if ([object[@"fullAccess"] isEqualToString:@"Yes"]) {
                                topicProgressForUser[@"purchased"]  = @"Free";
                            } else {
                                topicProgressForUser[@"purchased"]  = @"No";
                            }
                        }
                        [PFObject saveAllInBackground:objects block:^(BOOL succeeded, NSError *error) {
                            if (error != nil) {
                                // Do something here to handle the error

                            } else {
                                //
                            }
                        }
                         ]; // saveAllInBackground
                    }
                }]; // topic block
            }
        }]; // signup block
    }
}
person mbm29414    schedule 08.01.2015

Измените строку кода ниже:

[topicProgressForUser saveEventually];

to

[topicProgressForUser saveInBackground];

Надеюсь это поможет..

person Henit Nathwani    schedule 08.01.2015