为什么这不是数组?

时间:2019-07-12 15:50:51

标签: objective-c

我是完整的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:)];

1 个答案:

答案 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: