1

現在UIImageView、ストーリーボードには 2 つの があり、そのうちの 1 つは自分の Facebook プロフィール写真をダウンロードし、もう 1 つは友人のプロフィール写真をダウンロードします。

ストーリーボードのレイアウト

ただし、私の問題は、これが期待どおりに機能するのは 60% の時間だけであり、残りの 40% の時間は、友人の写真が下部に表示されるはずの場所に自分のプロフィール写真が表示され、上部のボックスは空のままです。NSURLConnectionDataDelegateこれが、ビューをダウンロードまたは完了するときにメソッドを呼び出す方法の結果なのか、それとも Facebook に呼び出されるリクエストの性質によるものなのかはわかりません。

Facebook への 2 つのリクエストの要約版を に貼り付けましたviewDidLoad。1 つは自分のプロフィール写真を取得し、もう 1 つは友人の写真を取得します。

// ----- Gets my own profile picture, using requestForMe -----
FBRequest *request = [FBRequest requestForMe];
[request startWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
    //handle response
    if(!error){
        //Some methods not included for breveity, includes facebookID used below
        NSURL *pictureURL = [NSURL URLWithString:[NSString stringWithFormat:@"https://graph.facebook.com/%@/picture?type=large&return_ssl_resources=1", facebookID]];
        self.imageData = [[NSMutableData alloc] init];
        switcher = 1;
        NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:pictureURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:2.0f];
        NSURLConnection *urlConnection = [[NSURLConnection alloc] initWithRequest:urlRequest delegate:self];
        if (!urlConnection){
            NSLog(@"Failed to download picture");
        }
    }
}];
// ----- Gets a profile picture of my friend, using requestForMyFriends -----
FBRequest *requestForFriends = [FBRequest requestForMyFriends]; 
[requestForFriends startWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
    if(!error){
        //Other methods not included, including facebookFriendID
        NSURL *friendPictureURL = [NSURL URLWithString:[NSString stringWithFormat:@"https://graph.facebook.com/%@/picture?type=large&return_ssl_resources=1", facebookFriendID]];
        self.supportImageData = [[NSMutableData alloc] init];
        switcher = 2;
        NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:friendPictureURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:2.0f];
        NSURLConnection *urlConnection = [[NSURLConnection alloc] initWithRequest:urlRequest delegate:self];
        if (!urlConnection){
            NSLog(@"Failed to download picture");
        }
    }
}];

どちらのリクエストもNSURLConnectionDataDelegateメソッドを呼び出し、 を使用しswitcherてどの画像をいつロードするかを決定します。

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    // As chuncks of the image are received, we build our data file

    if (switcher == 1) [self.imageData appendData:data];
    if (switcher == 2)[self.supportImageData appendData:data];
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{

    //When the entire image is finished downloading
    if (switcher == 1) {
        UIImage *image = [UIImage imageWithData:self.imageData]; //puts the completed picture into the UI
        self.titleImageView.image = image;
        [self.titleImageView setClipsToBounds:YES];
    }

    if (switcher == 2) {
        UIImage *supportImage = [UIImage imageWithData:self.supportImageData];
        self.supportImageView.image = supportImage;
        [self.titleImageView setClipsToBounds:YES];
    }
}
4

1 に答える 1