3

내가 노력하고 다음을 사용하여 사용자의 프로필 사진에 기록 표시하는 방법 .pictureUrl]); 일부 데이터를 표시하지만 UIImageView에서는 그림을 표시하지 않습니다.디스플레이 사용자 프로필 사진

도움을 주시면 감사하겠습니다.

+1

당신은 문제의 가능한 원인으로 제거 것을 당신의 시도 무엇. pictureUrl이 유효한지 확인 했습니까? idData가 유효하지 않은 경우? [SFAccountManager sharedInstance] .idData.pictureURL은 유효한 URL을 반환합니다. dataWithContentsOfURL에 대한 호출이 데이터를 모두 읽습니까? 질문에 이러한 측면에 관한 정보를 쓰지 않은 이유는 무엇입니까? 당신이 그 (것)들을 시도하지 않은 경우에 왜 당신은 첫째로 너 자신을 위해 무엇이든을 시도하기 전에 배치하고 있는가? – Gruntcakes

+0

나는 모든 언급을 시험했다. URL을 확인하기 위해 사파리에서 링크를 붙여 넣기도하고 Salesforce에 로그인 한 후에 사진을 제공합니다. 코드 스 니펫을 추가했습니다. [profilePicData writeToFile : 원자 적으로 filePath : 예]; 로컬에 그림 파일을 씁니다. 그러나 열 때 잘못된 파일이 표시됩니다. – neo

+0

UIImageView에서로드/표시와 관련된 코드를 표시하지 않았습니다. – Gruntcakes

답변

0

salesforce Rest API를 호출하고 사용자 정보를 가져 오는 중입니다.

NSString *[email protected]"/services/data/v29.0/chatter/users/me"; 
    SFRestMethod method=0; 
    SFRestRequest *request = [SFRestRequest requestWithMethod:method path:path queryParams:queryParams]; 
    [[SFRestAPI sharedInstance] send:request delegate:self]; 

이것은 json 응답을 반환합니다. 는 - (무효) 요청 : {. ...} : (SFRestRequest *) 요청 didLoadResponse (ID) dataResponse

구문 분석은 그것에서 사진 사전을 요구하고 이미지를로드/저장 fullEmailPhotoUrl를 사용합니다. largePhotoUrl 및 largePhotoUrl을 사용하면 사진이로드되지 않았습니다. 예 : 사진 사전 분석 :

사진 = {

fullEmailPhotoUrl = "https://na14.salesforce.com/ncsphoto/ < SOMEIDENTIFIERS>";

largePhotoUrl = "https://c.na14.content.force.com/profilephoto/ < SOMEIDENTIFIERS>/F";

photoVersionId = < PHOTOID>;

smallPhotoUrl = "https://c.na14.content.force.com/profilephoto/ < SOMEIDENTIFIERS>/T";

standardEmailPhotoUrl = "https://na14.salesforce.com/ncsphoto/ < SOMEIDENTIFIERS>";

url = "/services/data/v29.0/chatter/users/ < SOMEIDENTIFIERS/photo";

}; 
2

Chatter API 내부에서 정확히 동일한 작업을 시도했습니다. "smallPhotoUrl"아래의 피드 데이터에서 이미지를로드하려고합니다. 내가 발견 한 것은 URL 끝에 활성 토큰이 추가되어야한다는 것입니다.

이 소스 개념에 저를 소개 : Accessing Chatter user pics

그리고 마침내 어떻게 여기에 토큰에 액세스하는 몇 가지 명확한 정보를 찾을 수 있었다 :

NSString *builtImageUrlWithToken = [NSString stringWithFormat:@"%@?oauth_token=%@", 
phototoUrl, [SFAccountManager sharedInstance].credentials.accessToken]; 


    NSURL *imageURL = [NSURL URLWithString:builtImageUrlWithToken]; 
    NSData *imageData = [NSData dataWithContentsOfURL:imageURL]; 
: 그래서 결국 내가 이런 짓을 262

salesforce_platform_mobile_services.pdf 페이지를

나는이 주제와 관련이 있다고 생각하는데, 나는이 특별한 해결책을 찾아 보면서이 주제를 발견했다. 나는 다른 사람들에게도 유용 할 것이라고 확신한다.

감사합니다.

1

첫 번째 Apple 문서는 동기식이기 때문에 네트워크 호출에 dataWithContentsOfURL을 사용하지 않는다고 말합니다.

그래서, 당신은 이미지를 얻을 대신에이 같은 작업을 수행 할 수 있습니다. (이 비동기입니다 대신 대표단의 블록을 사용할 수 있습니다.)

SFIdentityData *idData = [SFAccountManager sharedInstance].idData; 

if(idData != nil) { 
    SFRestRequest *request = [[SFRestRequest alloc] init]; 
    request.endpoint = [idData.pictureUrl absoluteString]; 
    request.method = SFRestMethodGET; 
    request.path = @""; 

    [[SFRestAPI sharedInstance] send:request delegate:_delegate]; 
} 

를 할 수있는 대리인에

을 (위해 예를 들어, CoreData에 이미지를 저장하거나 UIImage에 NSData를 할당하십시오.

[[UIImage alloc] initWithData : picData];

또한 UIImage가 올바르게 배선되어 있는지 확인해야합니다. 한 가지 방법은 IBOutlet 인 UIImageView를 사용하는 것입니다. Alamofire를 사용하여 빠른 3에서

0

:

 if let url = URL(string: baseURl + "/sobjects/Attachment/\(imageID)/Body"){ 

     let header = ["Authorization": "Your Auth Token"] 

     Alamofire.request(url, method: .get, parameters: nil, encoding: JSONEncoding.default, headers: header).responseData { (response) in 
      if response.error == nil { 
       print(response.result) 
       // Show the downloaded image: 
       if let data = response.data { 
        debugPrint(data) 
        self.profileImg.image = UIImage(data: data) 
        self.profileImg.contentMode = .scaleAspectFill 
        debugPrint(UIImage(data: data)!) 
       } 
      } 
      } 
     } 
+0

이것을 구현하여 결과를 얻었습니다. 당신이 또한 그것에 찔린다면 그것을 사용해야합니다. –