IOS:从照片路径获取NSData

时间:2013-09-04 06:18:36

标签: iphone ios facebook

我有一组来自照片库的图像路径。我需要通过我的Facebook应用程序发布这些照片。但我收到错误324,“需要上传文件”。我认为我从路径获取NSData的方式是错误的。有什么帮助吗?

NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString: URLImages[i]]];
NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                               messageTextView.text, @"message", imageData, @"source", nil];

但是当我在项目中硬编码图像时,它正在工作

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"IMAG0386" ofType:@"jpg"];
NSData *imageData = [NSData dataWithContentsOfFile:filePath];
    mosaicShareImages[i]]];
NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                               messageTextView.text, @"message", imageData, @"source", nil];

4 个答案:

答案 0 :(得分:1)

如果您尝试访问资产库网址(以assets-library://开头),NSData方法dataWithContentsOfURL:将失败并返回nil。此方法没有访问与资产URL相关的图像所需的权限。要从资产库中读取,您需要使用ALAssetsLibrary

- (void)assetForURL:(NSURL *)assetURL 
        resultBlock:(ALAssetsLibraryAssetForURLResultBlock)resultBlock 
        failureBlock:(ALAssetsLibraryAccessFailureBlock)failureBlock

方法。正如您所看到的,API将失败和成功的块作为参数。此方法是异步的,因为可能需要要求用户授予对数据的访问权。

有关API from Apple docs

的更多信息
  

当请求资产时,可能会要求用户确认应用程序对库的访问权限;但是,该方法立即返回。您应该在resultBlock中对资产执行所需的任何工作。   如果用户拒绝访问应用程序,或者如果不允许应用程序访问数据,则会调用失败块。

如何使用此API可在此答案中找到。 https://stackoverflow.com/a/13523463/1407017

希望有所帮助!

答案 1 :(得分:0)

NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@",URLImages]];

NSLog(@"%@",url);

NSData *data = [[NSData alloc]initWithContentsOfURL:url];

UIImage * img=[UIImage imageWithData:data];

ImgView.image=img;

尝试这个..

答案 2 :(得分:0)

在代码中尝试此更改:

NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@",URLImages[i]]]];

答案 3 :(得分:0)

如果您的数组URLImages [i]包含图像文件的绝对路径,那么您需要使用[NSURL fileURLWithPath:],如下所示:

NSData *imageData = [NSData dataWithContentsOfURL:[NSURL fileURLWithPath: URLImages[i]]];