Изображение PFFile не загружается перед подключением к PFImageView?

Я использую Parse для входа в Facebook, чтобы создать нового пользователя. Я получаю несколько полей из Facebook, такие как их имя и местоположение, запрашиваю их изображение профиля для загрузки в фоновом режиме, прежде чем перейти к контроллеру основного вида, у которого есть PFImageView для изображения профиля.

Проблема в том, что пользователь PFFile [@"profileImage"] по-прежнему равен нулю к моменту запуска viewDidLoad контроллера основного представления, поэтому загружать InBackground нечего.

Я не хочу ждать загрузки изображения профиля, прежде чем обращаться к контроллеру основного вида... это займет некоторое случайное время и будет просто плохим.

Итак, как мне поступить с файлом PFFile, который еще не загружен, прежде чем передать его в PFFImageView? Какой-то заполнитель?

Вот мой код:

------- in LoginViewController.m

- (void) pressedFacebookLogin {
    [PFFacebookUtils logInWithPermissions...
        if(user.isNew) {
           FBRequest *request = [FBRequest requestForMe];
           [request startWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
                NSDictionary *userData = (NSDictionary *)result;    

                user[@"fullName"] = userData[@"name"];
                // get location, relationship if available
                [user saveInBackground];

                // start getting the user's profile image before going to main view controller
                NSURL *pictureURL = [NSURL URLWithString:[NSString stringWithFormat:@"https://graph.facebook.com/%@/picture?type=large&return_ssl_resources=1", facebookID]];
                NSURLRequest *urlRequest = [NSURLRequest requestWithURL:pictureURL];
                [NSURLConnection sendAsynchronousRequest:urlRequest queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {

                    if (connectionError == nil && data != nil) {
                        UIImage *tmpImage = [UIImage imageWithData:data];
                        NSData *imageData = UIImagePNGRepresentation(tmpImage);
                        PFFile *imageFile = [PFFile fileWithName:@"image.png" data:imageData];
                        user[@"profileImage"] = imageFile;
                        [user saveInBackground];
                    }
                }];

                [self segueToMainViewController];

           }];
        }else {
             // deal with existing user...
        }
    }];
}

-------------- in MainViewController.m

- (void) viewDidLoad {
    [super viewDidLoad];

    PFUser *user = [PFUser currentUser];

    self.profileImageView.image = [UIImage imageNamed:@"placeholder"];
    PFFile *profileImageFile = user[@"profileImage"];
    // at this point profileImageFile is nil
    self.profileImageView.file = profileImageFile;
    [self.profileImageView loadInBackground];

}

1 ответ

В том месте, где вы получите profileImageFile как пустой, добавьте эту строку.

Я полагаю, что profileImageView вы используете ImageView.

@property (weak, nonatomic) IBOutlet UIImageView *profileImageView;

// at this line where you get profileImageFile as nil
[self.profileImageView setImageWithURL:[NSURL URLWithString:user[@"profileImage"]] placeholderImage:[UIImage imageNamed:@"default_profileImage"]];
Другие вопросы по тегам