user3615707
user3615707

Reputation: 89

Parse 122 error upload

If I save text without having any text in the field I get this error message in Parse.com: Update Failure - The operation couldn't be completed(Parse error 122.) If I press OK and then try to dismiss the view with Cancel(a button item) the app crashes. I think a valid file name at Parse.com has to contain at least 1 character. Maybe I can do do something to stop the user from saving when not enter text? Any ideas?

This my code:

- (IBAction)save:(id)sender {
    // Create PFObject with profile information
    PFUser *profile = [PFUser currentUser];
    [profile setObject:nameTextField.text forKey:@"name"];
    [profile setObject:titleTextField.text forKey:@"title"];
    [profile setObject:locationTextField.text forKey:@"location"];

    // Profile image
    NSData *imageData = UIImageJPEGRepresentation(profileImageView.image, 0.8);

    NSString *filename = [NSString stringWithFormat:@"%@", nameTextField.text];

    PFFile *imageFile = [PFFile fileWithName:filename data:imageData];
    [profile setObject:imageFile forKey:@"profileimageFile"];

    // Show progress
    MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
    hud.mode = MBProgressHUDModeIndeterminate;
    hud.labelText = @"Updating";
    [hud show:YES];

    // Upload profile to Parse

    if(nameTextField.text.length==0 && titleTextField.text.length==0 && locationTextField.text.length==0)

    [hud hide:YES];

    [profile saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {

            if (error) {
                [[[UIAlertView alloc] initWithTitle:@"Profile Information" message:@"Fill in atleast one field" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]show];

                [hud hide:YES];
            }
            else {
            // Show success message
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"" message:@"Successfully updated profile" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
            [alert show];

            [hud hide:YES];

            [self dismissViewControllerAnimated:YES completion:nil];

            [self performSegueWithIdentifier:@"profile" sender:self];
        }
    }];
}


- (IBAction)Cancel:(id)sender {

    [self dismissViewControllerAnimated:YES completion:nil];
    [self performSegueWithIdentifier:@"profile" sender:self];
}

Upvotes: 1

Views: 909

Answers (1)

Logan
Logan

Reputation: 53112

1

Test if your one letter theory is true. Change:

NSString *filename = [NSString stringWithFormat:@"%@", nameTextField.text];

To:

NSString *filename = [NSString stringWithFormat:@"file%@", nameTextField.text];

2

Or just avoid it if it's blank. So this:

NSString *filename = [NSString stringWithFormat:@"%@", nameTextField.text];

PFFile *imageFile = [PFFile fileWithName:filename data:imageData];
[profile setObject:imageFile forKey:@"profileimageFile"];

Becomes:

if (nameTextField.text) {
    NSString *filename = [NSString stringWithFormat:@"%@", nameTextField.text];

    PFFile *imageFile = [PFFile fileWithName:filename data:imageData];
    [profile setObject:imageFile forKey:@"profileimageFile"];
}

3

Also, what is this:

if(nameTextField.text.length==0 && titleTextField.text.length==0 && locationTextField.text.length==0)

It's doesn't appear to be connected to anything?

4

You call this twice in quick succession, and then again right after the file saves. Is there something in the method that makes the repetitive calls necessary?

[hud hide:YES];

5

Your if statement doesn't appear to be connected to anything:

if(nameTextField.text.length==0 && titleTextField.text.length==0 && locationTextField.text.length==0)

I'm assuming you want:

if(nameTextField.text.length==0 && titleTextField.text.length==0 && locationTextField.text.length==0) {

    [hud hide:YES];

    [profile saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {

        if (error) {
            [[[UIAlertView alloc] initWithTitle:@"Profile Information" message:@"Fill in atleast one field" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]show];

            [hud hide:YES];
        }
        else {
            // Show success message
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"" message:@"Successfully updated profile" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
            [alert show];

            [hud hide:YES];

            [self dismissViewControllerAnimated:YES completion:nil];

            [self performSegueWithIdentifier:@"profile" sender:self];
        }
    }];
}

Upvotes: 1

Related Questions