Table View Controller があり、それを Collection View Controller に変更したいのですが、アプリは JSON を使用して情報を取得します。
ストーリーボードに Collection View Controller を既に作成しました。私のView Controllerは「UpcomingReleasesViewController」と呼ばれ、「UpcomingReleaseCell」と呼ばれるUICollectionViewCellがあります。ストーリーボードには、「release_name」というコレクション セルにリンクされたラベルがあります。
TVC にあったコードを転送したいのですが、更新に問題があります。
UpcomingReleasesViewController.h に追加したコード (TVC にあったように)
@interface UpcomingReleasesViewController : UICollectionViewController
@property (strong, nonatomic) NSMutableArray *upcomingReleases;
@end
このコードを UpcomingReleasesViewController.m に追加しました ( cell.textLabel.textを呼び出すとエラーが発生します)
- (void)viewDidLoad
{
[super viewDidLoad];
NSURL *upcomingReleaseURL = [NSURL URLWithString:@"http://obscure-lake-7450.herokuapp.com/upcoming.json"];
NSData *jsonData = [NSData dataWithContentsOfURL:upcomingReleaseURL];
NSError *error = nil;
NSDictionary *dataDictionary = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&error];
self.upcomingReleases = [NSMutableArray array];
NSArray *upcomingReleasesArray = [dataDictionary objectForKey:@"upcoming_releases"];
for (NSDictionary *upcomingReleaseDictionary in upcomingReleasesArray) {
UpcomingRelease *upcomingRelease = [UpcomingRelease upcomingReleaseWithName:[upcomingReleaseDictionary objectForKey:@"release_name"]];
[self.upcomingReleases addObject:upcomingRelease];
}
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
static NSString *identifier = @"Cell";
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];
UpcomingRelease *upcomingRelease = [self.upcomingReleases objectAtIndex:indexPath.row];
cell.textLabel.text = upcomingRelease.release_name;
return cell;
}
また、TVC を使用していたときに、次のコードを含む「UpcomingRelease」という NSObject がありました。
UpcomingRelease.h
@interface UpcomingRelease : NSObject
@property (nonatomic, strong) NSString *release_name;
// Designated Initializer
- (id) initWithTitle:(NSString *)release_name;
+ (id) upcomingReleaseWithName:(NSString *)release_name;
@end
UpcomingRelease.m
@implementation UpcomingRelease
- (id) initWithTitle:(NSString *)release_name {
self = [super init];
if ( self ){
self.release_name = release_name;
}
return self;
}
+ (id) upcomingReleaseWithName:(NSString *)release_name {
return [[self alloc] initWithTitle:release_name];
}
@end
新しいアプリ用に NSObject を作成してそのコードを追加する必要がありますか?それとも UpcomingReleaseCell に追加する必要がありますか?
ありがとう。