私はこのプロジェクトを進めてポートフォリオを拡張しています。私はまだ客観的に新しいです - C、ので、非常に感謝されるでしょう!NSArrayにはオブジェクトがありますが、UICollectionViewが空になっています
私はこのコードを数日間使っています。私は、すべてのセルに同じ情報(希望の結果ではない)を表示させることができたので、ラベルが機能することを認識しています。これは私の配列がすべてのオブジェクトを格納していなかったという障害になりそうです。
以下は私のUIViewControllerのコードです。
最初の問題
だから私はのNSLogは、私の目指すものです8つのオブジェクトが表示されていることを確認しました。
@interface YourDowey()
@property (nonatomic, strong) NSMutableArray *eventTitleArray;
@property (nonatomic, strong) NSMutableArray *eventLocationArray;
@property (nonatomic, strong) NSMutableArray *eventIconArray;
@property (nonatomic, strong) NSMutableArray *eventPriceArray;
@property (nonatomic, strong) NSMutableArray *eventTypeArray;
@end
@implementation YourDowey
- (void)viewDidLoad {
[super viewDidLoad];
NSMutableArray *eventTitleArray = [[NSMutableArray alloc]initWithCapacity:8];
NSMutableArray *eventLocationArray = [[NSMutableArray alloc]initWithCapacity:8];
NSMutableArray *eventIconArray = [[NSMutableArray alloc]initWithCapacity:8];
NSMutableArray *eventPriceArray = [[NSMutableArray alloc]initWithCapacity:8];
NSMutableArray *eventTypeArray = [[NSMutableArray alloc]initWithCapacity:8];
for (NSUInteger index = 0; (index < 8) ; index++){
EventsList *eventList = [[EventsList alloc] initWithIndex:index];
NSString *individualEventTitle = eventList.eventTitle;
NSString *individualEventLocation = eventList.eventLocation;
NSString *individualEventIcon = eventList.eventIcon;
NSString *individualEventPrice = eventList.eventPrice;
NSString *individualEventType = eventList.eventType;
[eventTitleArray addObject:individualEventTitle];
[eventLocationArray addObject:individualEventLocation];
[eventIconArray addObject:individualEventIcon];
[eventPriceArray addObject:individualEventPrice];
[eventTypeArray addObject:individualEventType];
}
NSLog(@"Events: %@", eventTitleArray);
NSLog(@"Number of objects: %lu", (unsigned long)[eventTitleArray count]);
}
しかし、私が望むセルの数を決定する方法を使用すると、配列数によってUICollectionViewで0個のセルが得られますか? NSLogが8つのオブジェクトがあることを確認すると混乱します。
-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
return [self.eventTitleArray count];
}
これはUIViewControllerCellにコードに対して、細胞それぞれUIObjectクラス(ラベル/画像)にアレイを割り当てます。
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
EventsCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"eventsCell" forIndexPath:indexPath];
NSString *imagesString = [self.eventIconArray objectAtIndex:indexPath.row];
cell.eventImage.image = [UIImage imageNamed:imagesString];
cell.eventTitle.text = [self.eventTitleArray objectAtIndex:indexPath.row];
cell.eventLocation.text = [self.eventLocationArray objectAtIndex:indexPath.row];
cell.eventPrice.text = [self.eventPriceArray objectAtIndex:indexPath.row];
cell.eventType.text = [self.eventTypeArray objectAtIndex:indexPath.row];
return cell;
}
私の疑惑
は、私は問題の背後にあるロジックを感知しようとしています。そして、UICollectionViewメソッドがviewDidLoadの前に呼び出されているという事実になるかどうかはわかりません。私はviewDidLoadには、NSLogを使って明らかに配列に8つのオブジェクトがありますが、UICollectionView/Cellに関連したメソッドを使っていないと、空であるようですね??
以下
が配列情報を割り当て取得された辞書に関するコードする更新済み。
EventsLibrary.h
#import <Foundation/Foundation.h>
extern NSString *const kTitle;
extern NSString *const kLocation;
extern NSString *const kPrice;
extern NSString *const kIcon;
extern NSString *const kLargeIcon;
extern NSString *const kType;
@interface EventsLibrary : NSObject
@property (strong, nonatomic) NSArray *library;
@end
EventsLibrary.m
#import "EventsLibrary.h"
NSString *const kTitle = @"title";
NSString *const kLocation = @"location";
NSString *const kPrice = @"price";
NSString *const kIcon = @"icon";
NSString *const kLargeIcon = @"largeIcon";
NSString *const kType = @"type";
@implementation EventsLibrary
-(instancetype) init{
self = [super init];
if (self) {
_library = @[ @{ kTitle:@"iCafe de Paris",
kLocation:@"International Drive",
kPrice:@"$10",
kIcon:@"iCafe.png",
kLargeIcon:@"iCafeLrg.png",
kType:@"Food"},
@{ kTitle:@"Orlando's Museum of Art",
kLocation:@"N Mills Ave",
kPrice:@"$20",
kIcon:@"Museum.png",
kLargeIcon:@"MuseumLrg.png",
kType:@"Art"},
@{ kTitle:@"Club 180",
kLocation:@"W Church Street",
kPrice:@"$20",
kIcon:@"Club180.png",
kLargeIcon:@"Club180Lrg.png",
kType:@"NightLife"},
@{ kTitle:@"Wekiva Springs",
kLocation:@"Wekiva Circle, Apopka",
kPrice:@"$5",
kIcon:@"Wekiva.png",
kLargeIcon:@"WekivaLrg.png",
kType:@"Nature"},
@{ kTitle:@"Kings Bowling",
kLocation:@"International Drive",
kPrice:@"$10",
kIcon:@"Kings.png",
kLargeIcon:@"KingLrg.png",
kType:@"Sports"},
@{ kTitle:@"Pirate's Cove Mini Golf",
kLocation:@"International Drive",
kPrice:@"$15",
kIcon:@"PiratesGolf.png",
kLargeIcon:@"PiratesGolfLrg.png",
kType:@"Sports"},
@{ kTitle:@"Cobb's Plaza Cinema",
kLocation:@"S Orange Ave",
kPrice:@"$8",
kIcon:@"Cobbs.png",
kLargeIcon:@"CobbsLrg.png",
kType:@"Art"},
@{ kTitle:@"Mango's Cafe",
kLocation:@"International Drive",
kPrice:@"FREE",
kIcon:@"Mangos.png",
kLargeIcon:@"MangosLrg.png",
kType:@"Food"}
];
}
return self;
}
@end
EventsList.h
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import "EventsLibrary.h"
@interface EventsList : NSObject
@property (strong, nonatomic) NSString *eventTitle;
@property (strong, nonatomic) NSString *eventLocation;
@property (strong, nonatomic) NSString *eventPrice;
@property (strong, nonatomic) NSString *eventIcon;
@property (strong, nonatomic) NSString *eventIconLarge;
@property (strong, nonatomic) NSString *eventType;
- (instancetype)initWithIndex:(NSUInteger)index;
@end
EventsList.m
#import "EventsList.h"
@implementation EventsList
-(instancetype)initWithIndex:(NSUInteger)index{
self = [super init];
if (self) {
EventsLibrary *eventsLibrary = [[EventsLibrary alloc]init];
NSArray *library = eventsLibrary.library;
NSDictionary *eventsDictionary = library[index];
_eventTitle = [eventsDictionary objectForKey:kTitle];
_eventLocation = [eventsDictionary objectForKey:kLocation];
_eventPrice = [eventsDictionary objectForKey:kPrice];
NSString *iconName = [eventsDictionary objectForKey:kIcon];
_eventIcon = [UIImage imageNamed:iconName];
NSString *largeIconName = [eventsDictionary objectForKey:kLargeIcon];
_eventIconLarge = [UIImage imageNamed:largeIconName];
_eventType = [eventsDictionary objectForKey:kType];
}
return self;
}
@end
あなたのコードはどこに 'self.eventTitleArray'ですか?あなたが投稿したコードは、同じ名前の別のローカルの配列変数に値を設定します。 – rmaddy
なぜ5つの別々のアレイがありますか?イベントオブジェクトの配列が1つだけではないのはなぜですか? – rmaddy
@rmaddyと同意します。 ImageName、Title、Location、PriceおよびTypeをそれぞれ含むNSDictionaryオブジェクトを実装した配列を1つ使用することを検討してください。 – Tcharni