2014-09-26 39 views
0

从ViewController转移到PFFile的子类时,我目前遇到数据丢失的问题。传递的数据是要上传到用户配置文件的图像数据。下面是选择图像的代码:将数据传递给Singleton iOS

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 
// Access the uncropped image from info dictionary 
UIImage *image = [info objectForKey:@"UIImagePickerControllerOriginalImage"]; 

// Dismiss controller 
[picker dismissViewControllerAnimated:YES completion:nil]; 

// Resize image 
_focusedImage.image = image; 


NSData *imageData = UIImageJPEGRepresentation(image, 0.05f); 
PFFile *imageFile = [PFFile fileWithName:@"Image.jpg" data:imageData]; 
[[imageUpload uploadImage] setImagePFFile:imageFile]; 
} 

日志此视图imageFile正确地打印出来。然而,当我通过我的单例类imageUpload uploadImage传递数据这是数据结构的样子:

+ (imageUpload *) uploadImage 
{ 
static imageUpload*_sharedImageUpload = nil; 
_sharedImageUpload = [[self alloc] init]; 
_sharedImageUpload.imageData = [[NSData alloc] init]; 

PFUser *user = [PFUser currentUser]; 
_sharedImageUpload.imagePFFile = [[PFFile alloc] init]; 

PFFile *imageFile = [PFFile fileWithName:@"Image.jpg" data:_sharedImageUpload.imageData]; 


[imageFile saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) { 
    if (!error) 
    { 
     [user setObject:imageFile forKey:@"image"]; 
     [user saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) { 
      if (!error) 
      { 
       NSLog(@"This should be the profile image upload"); 
      } 
      else 
      { 
       NSLog(@"Something went wrong: %@", error); 
      } 
     }]; 
    } 
}]; 

return _sharedImageUpload; 
} 

当我到了这一点,该系统只是上传了一个空文件(零个字节)来分析。命名是正确的,并且它在数据库的正确位置,但是在该行的某处,文件本身的数据正在丢失。我无法弄清楚为什么。有没有人有什么建议?

+0

@jefflovejapan我对此还比较陌生,你是什​​么意思? – 2014-09-26 15:44:24

回答

6

它看起来像你混淆的对象和方法。你想要的是一个单独的对象,它有一个方法/函数来上传你的图像。我认为这是你在找什么:

//ImageUploader.h 

#import <Foundation/Foundation.h> 

@interface ImageUploader : NSObject 
+ (instancetype)uploader; 
- (void)uploadImageFile:(PFFile *)aFile; 
@end 

//ImageUploader.m 

#import "ImageUploader.h" 

@implementation ImageUploader 
+ (instancetype)uploader { 
    static ImageUploader * _uploader = nil; 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
     _uploader = [[self alloc] init]; 
    }); 

    return _uploader; 
} 

-(void)uploadPFFile:(PFFile *)imageFile{ 
    [imageFile saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) { 
     if (!error) 
     { 
      [user setObject:imageFile forKey:@"image"]; 
      [user saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) { 
       if (!error) 
       { 
        NSLog(@"This should be the profile image upload"); 
       } 
       else 
       { 
        NSLog(@"Something went wrong: %@", error); 
       } 
      }]; 
     } 
    }]; 
} 
@end 

通过调用[[ImageUploader uploader]uploadImageFile:someFile]调用它。

+0

谢谢。你是对的,我在那里混淆了对象和方法。非常感激! – 2014-09-26 16:04:52

+0

没问题。我刚刚意识到'saveInBackground'方法是在'PFFile'上定义的,这意味着你的上传器并没有真正做任何事情。相反,当你第一次创建它时,你可以在文件上调用'saveInBackground'。 – jefflovejapan 2014-09-26 16:13:32