2016-11-27 4 views
0

私はUICollectionViewを持っており、json URLの配列を表示しています。配列をUICollectionViewに追加する

ユーザーがcollectionViewの最後までスクロールするときに、別のjson url配列をコレクションビューに追加したいとします。私はこのようにしますが、それは仕事をしませんでした。たとえば、collectionViewのアイテムは36ですが、collectionViewではページ中央に6つのアイテムがあります。私のコード:

- (void)loadMore { 

NSString *path = @"https://example.com/?json=get_posts&page=2"; 

path = [path stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]; 

NSURL *url = [NSURL URLWithString:path]; 

NSData *data = [NSData dataWithContentsOfURL:url]; 

NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil]; 

NSArray *array = json[@"posts"]; 

self.contentArray = [self.contentArray arrayByAddingObjectsFromArray:array]; 

NSLog(@"%ld",(long)self.contentArray.count); 

[self.contentCollection reloadData]; 

} 
- (void)collectionView:(UICollectionView *)collectionView willDisplayCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath { 
    NSInteger lastSectionIndex = [self.contentCollection numberOfSections] -1; 
    NSInteger lastRowIndex = [self.contentCollection numberOfItemsInSection:lastSectionIndex] -1; 
    if ((indexPath.section == lastSectionIndex) && (indexPath.row == lastRowIndex)) { 
     [self loadMore]; 
    } 
} 

ありがとう。 self.contentArrayを再初期化しないでください。このaddObjectsFromArray

+0

あなたが "loadMore" 機能することを意味しますか決して呼ばれない? –

+0

いいえ、それはうまく動作しませんでした。答えのコメントを見てください。 @AliOmari – user3767387

+0

はあなたの代理人ですか? –

答えて

0

私はコードの下でこれを修正し[OK]を:私のViewController.hで

@property (assign, nonatomic) int page; 
@property (strong, nonatomic) NSArray *contentArray; 
@property (strong, nonatomic) IBOutlet UICollectionView *contentCollection; 

そして、私のViewController.mで:

- (void)collectionView:(UICollectionView *)collectionView willDisplayCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath { 
NSInteger lastSectionIndex = [self.contentCollection numberOfSections] - 1; 
NSInteger lastRowIndex = [self.contentCollection numberOfItemsInSection:lastSectionIndex] - 1; 
if ((indexPath.section == lastSectionIndex) && (indexPath.item == lastRowIndex)) { 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 

    NSString *path = [NSString stringWithFormat:@"http://example.com/?json=get_posts&page=%d",self.page]; 

    path = [path stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]; 

    NSURL *url = [NSURL URLWithString:path]; 

    NSData *data = [NSData dataWithContentsOfURL:url]; 

    NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil]; 
    NSArray *array = json[@"posts"]; 

    self.contentArray = [self.contentArray arrayByAddingObjectsFromArray:array]; 

    NSLog(@"%ld",(long)self.contentArray.count); 
    dispatch_async(dispatch_get_main_queue(),^{ 
    [self.contentCollection reloadData]; 
     self.page = self.page + 1; 
     }); 
    }); 
}} 
0
self.contentArray = [NSMutableArray array]; 
NSArray *array = json[@"posts"]; 
[self.contentArray addObjectsFromArray: array]; 
NSLog(@"%ld",(long)self.contentArray.count); 

ちょうど[self.contentArray addObjectsFromArray:array]; 新しいオブジェクトを古い配列に追加します。 ただし、contentArrayNSMutableArrayであることを確認してください。

+0

いいえ、私は最初の項目を削除しませんでした。 FaceBookまたはInstagramの例では、ページの最後までスクロールすると、新しい項目が表示されます。 – user3767387

0

を使用//配列について

関連する問題