0

私の質問には、おそらく私が見逃している本当に明白な答えがあります。私は次のような NSURLConnection を持っています:

- (void)viewDidLoad
{
[super viewDidLoad];

NSString *urlstring = [NSString stringWithFormat:@"http://127.0.0.1:8000/image/"];
NSMutableURLRequest *postRequest = [NSMutableURLRequest
                                    requestWithURL:[NSURL URLWithString:urlstring]
                                    cachePolicy:NSURLRequestUseProtocolCachePolicy
                                    timeoutInterval:30.0];
[postRequest setHTTPMethod:@"POST"];
self.firstConnection = [[NSURLConnection alloc] initWithRequest:postRequest delegate:self];

}

-(void)connectionDidFinishLoading:(NSURLConnection*)connection
{
if (connection == _firstConnection){
    // Deal with the data
    [self getImages];
    [self.collectionView reloadData];
}

-(void)getImages
{
NSError *error;
NSMutableArray* images= [NSJSONSerialization JSONObjectWithData:_data options:0 error:&error];
NSUInteger arrayLength = [images count];


dressURLS = [[NSMutableArray alloc] init];
for (NSInteger i=0;i<arrayLength;i++)
{
    NSString *temp = [images[i] objectForKey:@"image"];
    [dressURLS addObject:temp];
}
}

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{

static NSString *identifier = @"Cell";
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];
UIImageView *dressImageView = (UIImageView *)[cell viewWithTag:100];

NSString *clothesurl = dressURLS[i]; //i value????
NSString *url =[NSString stringWithFormat:@"http://127.0.0.1:8000/media/%@",clothesurl];
NSURL *imageURL = [NSURL URLWithString:url];

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{

    NSData *imageData = [NSData dataWithContentsOfURL:imageURL];

    dispatch_async(dispatch_get_main_queue(), ^{
        // Update the UI
        dressImageView.image = [UIImage imageWithData:imageData];
    });
});

return cell;

}

コードは非常に面倒です、私は知っています。これが仕組みです。viewDidLoad接続を初期化します。操作して配列に格納する必要があったデータを処理するconnectionDidFinishLoading場所に移動します。getImages次に、このreloadDataメソッドを使用して、あらゆる種類の問題に遭遇したコレクション ビューに移動しました。

dressURLS[i]i=0,1,2,3の要素にアクセスする必要があります。しかし、ループは a. a. コレクション ビューがリロードされます。非同期ディスパッチ。i0 から 3 までループできません。

これをより簡単にするための解決策はありますか?

4

2 に答える 2

1
-(void)connectionDidFinishLoading:(NSURLConnection*)connection
{
if (connection == _firstConnection){
    // Deal with the data
    [self getImages];
    [collectionView reloaddata]; // or self.collectionView (for property)
}

}

"ディスカッション コレクション ビュー内のすべてのアイテムを再読み込みするには、このメソッドを呼び出します。これにより、コレクション ビューは現在表示されているアイテムを破棄し、それらを再表示します。" - アップル

于 2013-09-13T13:03:01.723 に答える
0

コレクションビューをリロードすることで、BOOL を初めて、2 回目に状態を確認して画像を表示することができます。

于 2013-09-13T13:18:17.080 に答える