Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 下载用户时出现非常奇怪的问题';iPhone上的FB个人资料图片_Ios_Iphone_Objective C_Facebook_Facebook Fql - Fatal编程技术网

Ios 下载用户时出现非常奇怪的问题';iPhone上的FB个人资料图片

Ios 下载用户时出现非常奇怪的问题';iPhone上的FB个人资料图片,ios,iphone,objective-c,facebook,facebook-fql,Ios,Iphone,Objective C,Facebook,Facebook Fql,我为iPhone开发应用程序,并使用Facebook API进行一些社交活动。 我必须下载用户的个人资料图片,所以我编写了代码,通过FQL获取其URL并下载 乍一看,一切似乎都很好,我的代码工作正常,但几天后,我注意到用户的图片无法下载。FBSession正确打开,FQL查询执行时没有任何错误并返回正确的URL,但我的应用程序无法获取图像数据([NSData data with CONTENTS OFURL:]或NSURLConnection在所有情况下都开始返回nil数据,并出现“请求超时”错

我为iPhone开发应用程序,并使用Facebook API进行一些社交活动。 我必须下载用户的个人资料图片,所以我编写了代码,通过FQL获取其URL并下载

乍一看,一切似乎都很好,我的代码工作正常,但几天后,我注意到用户的图片无法下载。FBSession正确打开,FQL查询执行时没有任何错误并返回正确的URL,但我的应用程序无法获取图像数据([NSData data with CONTENTS OFURL:]或NSURLConnection在所有情况下都开始返回nil数据,并出现“请求超时”错误)。因此,我试图从iPhone设备上删除我的应用程序并清理Facebook数据,但除了在Facebook开发者门户网站上删除并重新创建我的应用程序帐户外,没有任何帮助。 目前,这种奇怪的情况再次出现:最初所有功能都按预期工作,但过了一段时间,下载用户图片开始失败。所以我不知道该怎么办

  • 我还注意到,Facebook的官方应用程序 moment也无法下载用户档案图片。所以我的应用程序和 Facebook应用程序暂时无法下载用户的个人资料图片
  • 此外,在模拟器上,所有这些都能继续正常工作。问题发生了 只在我的iPhone设备上
  • 此外,如果我试图下载另一张图片(我已与用户封面进行了核对) (图片)一切似乎都很好
有人能帮我解决这个问题吗?提前谢谢

所有代码如下

1) 开放FB会话

FBSessionStateHandler fbCompletion = ^(FBSession *session, FBSessionState status, NSError *error)
{
    if (session.isOpen == NO || error != nil)
        authCompletion(NO, error);
    else
        authCompletion(YES, error);
    [[FBSession activeSession] setStateChangeHandler:nil];
};

NSArray *readPermissions = @[@"basic_info", @"user_photos"];

BOOL cachedToken = [FBSession openActiveSessionWithReadPermissions:readPermissions allowLoginUI:NO completionHandler:nil];
if (cachedToken)
{
    authCompletion(YES, nil);
}
else
{
    [FBSession openActiveSessionWithReadPermissions:readPermissions allowLoginUI:YES completionHandler:^(FBSession *session, FBSessionState status, NSError *error)
     {
         if (error)
         {
             [[FBSession activeSession] closeAndClearTokenInformation];
             [FBSession renewSystemCredentials:^(ACAccountCredentialRenewResult result, NSError *error) {
                 [FBSession openActiveSessionWithReadPermissions:readPermissions allowLoginUI:YES completionHandler:fbCompletion];
             }];
         }
         else
             fbCompletion(session, status, error);
     }];
}
2) 执行FQL查询并获取URL

NSString *query = @"SELECT id,width,height,real_height,real_width, url FROM profile_pic WHERE id=me() AND width=260 AND height=260";
NSDictionary *params = @{@"q":query};
FBRequest *usersPictureRequest = [FBRequest requestWithGraphPath:@"fql" parameters:params HTTPMethod:@"GET"];

FBRequestConnection *fbRequestConnection = [[FBRequestConnection alloc] initWithTimeout:k_FBRequesTimeout];
[fbRequestConnection addRequest:usersPictureRequest completionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
        NSURL *pictureURL = result[@"data.url"];
        [self downloadPictureWithURL:pictureURL];
    }];
[fbRequestConnection start];
3) 下载图片数据:

NSBlockOperation *downloadOp = [NSBlockOperation blockOperationWithBlock:^{

    NSData *imageData = [NSData dataWithContentsOfURL:pictureURL options:0 error:&error];
    UIImage *image = [UIImage imageWithData:imageData scale:scale];
    dispatch_async(dispatch_get_main_queue(), ^{
        pictureHandler(image != nil ? image : defaultPicture);
    });
    [NetworkActivityIndicator hide];
}];
[self.operationQueue addOperation:downloadOp];

我对自己在下载facebook图片时遇到的问题记忆犹新,但不幸的是,我现在记不起细节了

我正在使用graph api获取一张正常工作的缩略图,如果它满足您的需要,也许您可以切换到使用类似的。您应该能够更改?type=以获得不同于我获取的大小

- (void) fetchFbImageForContact:(MyContact*) targetContact
{
    NSString* graphRequest = [NSString stringWithFormat:@"%@%@%@",  @"https://graph.facebook.com/",
                              targetContact.fbid,
                              @"/picture?type=square"];
    FBRequest *fbRequest = [FBRequest requestForGraphPath: graphRequest];
    [fbRequest startWithCompletionHandler:
     ^(FBRequestConnection *connection, id result, NSError *theError)
     {
         NSDictionary<FBGraphObject> *dict = (NSDictionary<FBGraphObject> *) result;
         if (dict)
         {
             NSString* urlAsString = [dict objectForKey:@"id"];
             if ([urlAsString length] > 0)
             {
                 NSURL *url = [NSURL URLWithString: urlAsString];
                 NSData *data = [NSData dataWithContentsOfURL:url];
                 targetContact.image = [UIImage imageWithData:data];
             }
         }
     }];
}
-(void)fetchFbImageForContact:(MyContact*)targetContact
{
NSString*graphRequest=[NSString stringWithFormat:@“%@%@%@”,@”https://graph.facebook.com/",
targetContact.fbid,
@“/picture?type=square”];
FBRequest*FBRequest=[FBRequestRequestForGraphPath:graphRequest];
[fbRequest startWithCompletionHandler:
^(FBRequestConnection*连接,id结果,N错误*theError)
{
NSDictionary*dict=(NSDictionary*)结果;
if(dict)
{
NSString*urlAsString=[dict objectForKey:@“id”];
如果([urlAsString长度]>0)
{
NSURL*url=[NSURL URLWithString:URLAString];
NSData*data=[NSData dataWithContentsOfURL:url];
targetContact.image=[UIImage imageWithData:data];
}
}
}];
}

最好、最简单的方法是使用


从响应中获取用户id,只需设置属性profileID

,我无法使用它,因为我必须使用圆形路径裁剪图像,因此我需要原始图像在显示之前对其进行预处理。另外,我确信FBProfilePictureView也会失败,因为最初的Facebook应用程序也会失败。好吧,你有view实例。你可以将其放入RoundThank,谢谢你的回复,但这对我没有帮助。我已获取解决方案中的URL,但下载也失败。