2013-09-29 151 views
3

我是新来解析,并试图保存和上传视频到云。这是我正在使用的代码,但在调用doneButtonAction时它会一直出现错误。我相信问题出在视频被保存为文件的时候,但我不知道如何解决这个问题。谢谢你在前进 -使用Parse.com上传视频

- (void)imagePickerController:(UIImagePickerController *)picker  didFinishPickingMediaWithInfo:(NSDictionary *)info { 

    NSURL *videoURL = [info objectForKey:UIImagePickerControllerMediaURL]; 
    NSLog(@"%@", videoURL); 


    if (UIVideoAtPathIsCompatibleWithSavedPhotosAlbum (self.moviePath)) 
    { 
     UISaveVideoAtPathToSavedPhotosAlbum (self.moviePath, nil, nil, nil); 
    } 

    [self shouldUploadVideo]; 
    [self doneButtonAction]; 
} 

- (void)shouldUploadVideo { 

    //Capturamos el NSUserdefault para grabar el evento 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    NSString *loadstring = [defaults objectForKey:@"Video"]; 
    NSLog(@"Working at first line"); 



    NSData *videoData = [NSData dataWithContentsOfURL:self.videoURL]; 
    NSLog(@"Working at second line"); 


    PFFile *videoFile = [PFFile fileWithData:videoData]; 
    NSLog(@"Working at third line"); 

    [self.videoFile saveInBackground]; 
    NSLog(@"Working at last line"); 

} 

- (void)doneButtonAction { 
    // Make sure there was no errors creating the image files 
    if (!self.videoFile) { 
     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Couldn't save your photo" 
                 message:nil 
                 delegate:nil 
               cancelButtonTitle:nil 
               otherButtonTitles:@"Dismiss",nil]; 
     [alert show]; 
     return; 
    } 

    // Create a Photo object 
    PFObject *video = [PFObject objectWithClassName:kPAPPhotoClassKey]; 
    [video setObject:[PFUser currentUser] forKey:kPAPPhotoUserKey]; 
    [video setObject:self.videoFile forKey:@"Video"]; 

    // Request a background execution task to allow us to finish uploading 
    // the photo even if the app is sent to the background 
    self.photoPostBackgroundTaskId = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{ 
     [[UIApplication sharedApplication] endBackgroundTask:self.photoPostBackgroundTaskId]; 
    }]; 

    // Save the Photo PFObject 
    [video saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) { 
     if (succeeded) { 
      NSLog(@"Photo uploaded"); 

      // Add the photo to the local cache 
      [[PAPCache sharedCache] setAttributesForPhoto:video likers:[NSArray array] commenters:[NSArray array] likedByCurrentUser:NO]; 

      // Send a notification. The main timeline will refresh itself when caught 
      [[NSNotificationCenter defaultCenter] postNotificationName:PAPTabBarControllerDidFinishEditingPhotoNotification object:video]; 
     } else { 
      NSLog(@"Photo failed to save: %@", error); 
      UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Couldn't post your photo" 
                  message:nil 
                  delegate:nil 
                cancelButtonTitle:nil 
                otherButtonTitles:@"Dismiss",nil]; 
      [alert show]; 
     } 

     // If we are currently in the background, suspend the app, otherwise 
     // cancel request for background processing. 
     [[UIApplication sharedApplication] endBackgroundTask:self.photoPostBackgroundTaskId]; 
    }]; 

    // Dismiss this screen 
    [self.parentViewController dismissViewControllerAnimated:YES completion:nil]; 

} 
+0

有什么错误? – rmaddy

+0

因此,在doneBottonAction中,如果文件没有保存正确,它会发送一条消息,并且这会一直被调用@rmaddy –

+0

我会再次提问。什么是错误?发布您获得的完整错误消息。 – rmaddy

回答

3

- (void)shouldUploadVideo { 

您有:

PFFile *videoFile = [PFFile fileWithData:videoData]; 
NSLog(@"Working at third line"); 

[self.videoFile saveInBackground]; 
NSLog(@"Working at last line"); 

您要上传self.videoFile背景 - 不录像档案

这意味着videoFile不在后台上传PFFile。

变化

PFFile *videoFile = [PFFile fileWithData:videoData]; 

self.videoFile = [PFFile fileWithData:videoData]; 
+0

谢谢sooooo多 –

+1

请注意,有一个10MB的限制 –

+0

有没有你的代码的快速版本? –