1

我有一组来自照片库的图像路径。我需要通过我的 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

4 回答 4

1

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

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

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

来自 Apple 文档的有关 API 的更多信息

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

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

希望有帮助!

于 2013-09-04T07:15:33.047 回答
0

尝试在代码中进行此更改:

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

于 2013-09-04T06:26:19.297 回答
0

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

NSData *imageData = [NSData dataWithContentsOfURL:[NSURL fileURLWithPath: URLImages[i]]];
于 2013-09-04T06:42:26.810 回答
0
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@",URLImages]];

NSLog(@"%@",url);

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

UIImage * img=[UIImage imageWithData:data];

ImgView.image=img;

试试这个。。

于 2013-09-04T06:21:28.423 回答