我有一个表视图控制器,我想将其更改为集合视图控制器,我的应用程序使用 JSON 获取其信息。
我已经在我的 Storyboard 中创建了一个 Collection 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,代码如下:
即将发布.h
@interface UpcomingRelease : NSObject
@property (nonatomic, strong) NSString *release_name;
// Designated Initializer
- (id) initWithTitle:(NSString *)release_name;
+ (id) upcomingReleaseWithName:(NSString *)release_name;
@end
即将发布.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 中?
谢谢。