【问题标题】:IOS: Get NSData from Photos pathIOS:从照片路径获取 NSData
【发布时间】:2013-09-04 06:18:36
【问题描述】:

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

【问题讨论】:

    标签: iphone ios facebook


    【解决方案1】:

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

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

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

    更多关于 API from Apple docs

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

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

    希望有帮助!

    【讨论】:

      【解决方案2】:

      在代码中尝试这种更改:

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:
          NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@",URLImages]];
          
          NSLog(@"%@",url);
          
          NSData *data = [[NSData alloc]initWithContentsOfURL:url];
          
          UIImage * img=[UIImage imageWithData:data];
          
          ImgView.image=img;
          

          试试这个..

          【讨论】:

          • 同样的错误,和 url 打印一样。 assets-library://asset/asset.JPG?id=F30FFA87-C329-4C21-AA00-0FF3A985A2A1&ext=JPG
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-01-20
          • 2016-11-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-24
          相关资源
          最近更新 更多