我正在尝试设置我的uitableview用于索引,我已经有很多部分工作正常,现在数据在NSDictionary继承人我的输出与nslog --->
Dictionary: {
H = (
Honda,
Honda,
Honda,
Honda,
Honda,
Honda,
Honda
);
M = (
Mazda,
Mazda,
Mitsubishi,
Mitsubishi,
Mitsubishi,
Mitsubishi,
Mitsubishi,
Mitsubishi
);
N = (
Nissan,
Nissan,
Nissan,
Nissan,
Nissan,
Nissan,
Nissan
);
T = (
Toyota,
Toyota,
Toyota
);
我现在正试图设置我的表
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
// Return the number of sections.
return [arraysByLetter count];
//return 0;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
return [[arraysByLetter objectAtIndex:section] count];
//return 1;
}
然而我收到警告'NSMutableDictionary'可能无法响应我的numberOfRowsInSection委托方法中的'objectAtIndex:' ...如何绕过这个?
答案 0 :(得分:1)
您不能像对待数组那样索引字典。您可以使用密钥访问字典。 NSDictionary确实提供了两种获取数组的方法:allKeys和allValues。
我不确定你要完成什么,但是如果你想按字母顺序组织汽车制造商,你可以获得所有的键([arraysByLetter allKeys]),按字母顺序排序,然后索引到那个排序的数组。当你真正获得汽车制造商的名字时,你将使用objectForKey:来加载制造商的数组。
<强>更新强> 假设一个名为sortedLetters的已排序数组,您可以将numberOfRowsInSection更改为以下内容:
NSString *currentLetter = [sortedLetters objectAtIndex:section];
return [[arraysByLetter objectForKey:currentLetter] count];
您可能希望在初始化时设置sortedLetters数组,除非它是动态的。
答案 1 :(得分:1)
警告消息告诉您确切的问题:arraysByLetter
是NSMutableDictionary
而非NSArray
(或其子类NSMutableArray
)的实例,因此不会不回复NSArray
等objectAtIndex:
方法。
相反,您应该使用NSDictionary
方法objectForKey:
,并传递与提供的部分编号对应的字母表字母。您可以使用switch
语句或字符串数组来确定要选择的键。
答案 2 :(得分:1)
objectAtIndex是一个数组方法,而不是字典方法。我对表数据源使用字典的方式如下:
- (NSInteger)tableView:numberOfRowsInSection:
{
NSArray *keys = [arraysByLetter allKeys];
NSArray *sortedKeys = [keys sortedArrayUsingSelector:@selector(caseInsensitiveComapre:)];
return [[arraysByLetter objectForKey:[sortedKeys objectAtIndex:section]] count];
}
我们必须排序的原因是因为allKeys没有按特定顺序出现并且可以更改。
答案 3 :(得分:0)
这是因为你不能在字典上使用objectAtIndex。您需要首先使用字典上的objectForKey提取字典中的对象,然后从这些对象创建一个数组。然后你可以在那个数组(数组对象数组)上使用objectAtIndex并对结果使用count。或者,一个简单的allValues消息到你的字典就足够了。
编辑:
在您的情况下,如果您需要第一部分有七行(七个Hondas),请创建一个数组并将[dictionary allValues]作为其内容。在numberOfRowsInSection方法中使用该数组,就像使用字典一样。