gpt4 book ai didi

ios - objective-c collectionview 不加载数据

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:05:41 26 4
gpt4 key购买 nike

不知何故,我的 collectionView 没有加载我的数据。我从 facebook 获取数据并在填充数组后调用 reloadData,但没有任何反应......

没有显示单元格,因为调用 ViewDidLoad 时数组为 0。

如何重新加载在collectionView上生效?我的代码有什么问题?

CollectionViewController.h

#import <UIKit/UIKit.h>
#import <FacebookSDK/FacebookSDK.h>

@interface CollectionViewController : UICollectionViewController <UICollectionViewDataSource, UICollectionViewDelegateFlowLayout>

@property (nonatomic, weak) IBOutlet UICollectionView *collectionView;
@property (nonatomic, strong) NSMutableArray *searches;
- (IBAction)getFotos:(id)sender;
@end

CollectionViewController.m

#import "CollectionViewController.h"
#import "CollectionViewCell.h"
#import "BHPhoto.h"

@interface CollectionViewController ()

@end

@implementation CollectionViewController

@synthesize collectionView;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}

- (void)viewDidLoad
{
[super viewDidLoad];
NSMutableArray *searches = [[NSMutableArray alloc] init];
self.searches = searches;

[self getFotos:nil];
NSLog(@"searches amount: %u", [self.searches count]);

[self.collectionView registerClass:[CollectionViewCell class] forCellWithReuseIdentifier:@"collcell"];
}

- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

#pragma mark - UICollectionView Datasource
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
int ret = [self.searches count]; // <-- here the searches return 0 instead of the filled searches size, what I though will happen if reloadData is called
NSLog(@"numberOfItemsinSection - I: %d", ret);
return ret;
}

- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
int ret = 1;
NSLog(@"numberOfSection - S: %d", ret);
return ret;
}

- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath {
UICollectionViewCell *cell = [cv dequeueReusableCellWithReuseIdentifier:@"collcell" forIndexPath:indexPath];
cell.backgroundColor = [UIColor whiteColor];
return cell;
}

#pragma mark - UICollectionViewDelegate
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
// @todo select
}

- (void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath {
// @todo de-select
}

#pragma mark - UICollectionViewDelegateFlowLayout
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
NSLog(@"SETTING SIZE FOR ITEM AT INDEX %d", indexPath.row);
return CGSizeMake(80, 80);
}

#pragma mark -
#pragma mark get Facebook fotos around me
- (IBAction)getFotos:(id)sender {
NSLog(@"getFotos in collview");
[FBRequestConnection
startWithGraphPath:@"search?type=place&center=43.119340,22.694992&distance=1000&fields=picture"
completionHandler:^(FBRequestConnection *connection,
id result,
NSError *error) {
if (!error) {
[self readjson:result];
}
}];
}

#pragma mark read json for search location
- (IBAction)readjson:(NSDictionary *)jsondata {

NSLog(@"keys: %@", [jsondata allKeys]);
for (id item in [jsondata objectForKey:@"data"]) {

// add Photos to array
NSURL *photoURL = item[@"picture"][@"data"][@"url"];
BHPhoto *photo = [BHPhoto photoWithImageURL:photoURL];
[self.searches addObject:photo];

}
NSLog(@"searches content: %@", self.searches);
[self.collectionView reloadData]; // <-- reload data is called but does not have an effect...

}


@end

调试输出:

2013-01-11 00:23:46.308 foobar[3099:19a03] getFotos in collview
2013-01-11 00:23:46.309 foobar[3099:19a03] searches amount: 0
2013-01-11 00:23:46.312 foobar[3099:19a03] numberOfSection - S: 1
2013-01-11 00:23:46.312 foobar[3099:19a03] numberOfItemsinSection - I: 0
2013-01-11 00:23:46.591 foobar[3099:19a03] keys: (
data,
paging
)
2013-01-11 00:23:46.592 foobar[3099:19a03] searches content: (
"<BHPhoto: 0x9351460>",
"<BHPhoto: 0x938ad20>",
"<BHPhoto: 0x938ade0>",
"<BHPhoto: 0x938ae90>",
"<BHPhoto: 0x938af40>",
"<BHPhoto: 0x938b000>"
)

干杯

最佳答案

您忘记将您的类设置为其自己的委托(delegate)/数据源。在您的 Controller 类 init 中,像这样添加这些行,以便它知道您的协议(protocol)实现是针对它自己的:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
self.collectionview.delegate = self;
self.collectionview.datasource = self;
}
return self;
}

这也花了我一段时间,但我注意到您的调试输出仅调用了 numberOfItemsInSection: 一次(在 viewDidLoad 上)。当您调用 [self.collectionview reloadData] 时,它会再次调用该方法,因此您应该会看到另一条具有正确计数的调试消息。

关于ios - objective-c collectionview 不加载数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14269377/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com