字母plist与名称和描述numberOfRowsInSection问题

时间:2014-05-28 16:36:21

标签: objective-c xcode uitableview ios7 plist

所以,我有一个描述多种美食的plist。在我的plist中,我有26个数组,每个数组都有一个字母的字母键。在这些阵列中,包含多种美食,这些都是字典。在每本字典中都有2个字符串,一个用于烹饪名称,另一个用于描述菜肴。我非常接近在表视图控制器中实现它,但我有一些问题。主要问题是访问名称并将其放在一个数组中,以便它可以用来告诉每个部分有多少行,该部分是字母表中的每个字母。我一直收到错误:" - [_ NSArrayI长度]:无法识别的选择器发送到实例...

非常感谢帮助。感谢

这就是我所拥有的:

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{

        if (tableView.tag == 1){
            NSString *key = keys[section]; //returns the key(letter) for the section
            NSDictionary *content = cuisines[key]; //returns the dictionary that consists of name and description
            NSString *name = [content valueForKey:@"name"];
            NSMutableArray *keyValues = [@[] mutableCopy];
            [keyValues addObject:name];
            return [keyValues count];
        }else{
            return [filteredcuisines count];
        }
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    if (tableView.tag == 1) {
        return [keys count]; //Return the amount of letters for the number of sections
    }else{
        return 1;
    }

这里还有我的字典看起来如何: http://imageshack.com/a/img835/9567/kkv7.png

这是我的搜索条形码。我需要将我所做的更改纳入我的plist。

-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString{
    [filteredcuisines removeAllObjects];
    if (searchString.length>0) {
        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF contains[c] %@", self.searchBar.text];
        for (NSString *key in keys) {
            NSArray *matches = [cuisines[key] filteredArrayUsingPredicate:predicate];
            [filteredcuisines addObjectsFromArray:matches];
        }
    }
    return YES;
}

1 个答案:

答案 0 :(得分:0)

看起来像"内容"你从美食[关键]得到的应该是一个数组,而不是字典。它还不清楚您尝试使用keyValues数组做什么。我认为你的方法可以简化为这个,

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{

        if (tableView.tag == 1){
            NSString *key = keys[section]; 
            NSArray *content = cuisines[key];  
            return content.count;
        }else{
            return [filteredcuisines count];
        }
}

我假设您在字典上使用调用allKeys获取密钥,然后按字母顺序排序。如果是这样,那么你可以用cellForRowAtIndexPath获取你的表视图的名称,

    NSArray *arrayForSingleLetter = self.cuisines[keys[indexPath.section]];
    cell.textLabel.text = arrayForSingleLetter[indexPath.row][@"name"];

必须将过滤数组修改为类似的内容,

-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString{
    [filteredcuisines removeAllObjects];
    if (searchString.length>0) {

        NSArray *arrayForSingleLetter = self.cuisines[[searchString substringToIndex:1]];
        NSIndexSet *indxs = [arrayForSingleLetter indexesOfObjectsPassingTest:^BOOL(NSDictionary *dict, NSUInteger idx, BOOL *stop) {
            return [dict[@"name"] rangeOfString:searchString].location != NSNotFound;
        }];

        [indxs enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL *stop) {
            [filteredcuisines addObject:arrayForSingleLetter[idx][@"name"]];
        }];
    }
    return YES;
}