我是完整的Obj-C新手。在我的numberOfRowsInSection中,我试图获取与某个类别关联的电视频道的列表。类别和电视频道是在字典中设置的。关键是类别,值是电视频道。
在接口文件中声明了一个channel和sectionNames属性:
@property (nonatomic, copy) NSDictionary<NSString *, NSString *> *channels;
@property (nonatomic, copy) NSArray<NSString *> *sectionNames;
在我的numberOfRowsInSection(tableview数据源方法)中,我试图返回与特定类别关联的通道数。但是由于某种原因,即使ChannelInSection是数组,它也没有count属性。那么,如何获取此变量中包含的元素数量?
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
NSString *sectionTitle = [_sectionNames objectAtIndex:(NSUInteger)section];
NSString *channelsInSection = [_channels valueForKey:sectionTitle];
return (NSInteger)[channelsInSection count];
}
由于某种原因,最后一行会产生错误。错误消息为“'NSString'的无可见@interface声明选择器'count'”。
但是..这是一个数组...不是吗?
请帮助!
这是字典:
self.channels = @{
@"Entertainment" : @[@"SnackableTV", @"Crave", @"Bravo", @"ETVE"],
@"Discovery" : @[@"Discovery", @"Discovery Velocity", @"Discovery Investigation", @"Discovery Animal Planet", @"Discovery Science"],
@"News" : @[@"CTV", @"CP24", @"BNN", @"CTV News"],
@"Sports" : @[@"TSN", @"RDS"],
};
self.sectionNames = [[self.channels allKeys] sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
答案 0 :(得分:3)
第一个问题是您已将channels
字典声明为具有NSString
值,但实际上它的值为NSArray
。将您的媒体资源更新为:
@property (nonatomic, copy) NSDictionary<NSString *, NSArray<NSString *> *> *channels;
然后,根据您的数据结构,进行更改:
NSString *channelsInSection = [_channels valueForKey:sectionTitle];
收件人:
NSArray *channelsInSection = [self.channels objectForKey:sectionTitle];
或更简单地说:
NSArray *channelsInSection = self.channels[sectionTitle];
除非明确知道需要使用键值编码,否则不要使用valueForKey:
。