如何根据plist键排列UITableView Sections标题?

时间:2014-01-31 00:48:39

标签: ios iphone objective-c uitableview

我有一个带有键值的plist,键是字符串,值也是字符串。 我不希望根据plist中的键输出uitableview部分标题 。那就是说我的意思是key1-应该是第1节的标题,key-2应该是第2节的标题,很快就会出现。 这是我的示例plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Settings</key>
    <array>
        <string>one-one</string>
        <string>one-two</string>
    </array>
    <key>Notifications</key>
    <array>
        <string>two-one</string>
        <string>two-two</string>
    </array>
    <key>Info</key>
    <array>
        <string>three_one</string>
        <string>three_two</string>
        <string>three_three</string>
    </array>
</dict>
</plist>

以下是我尝试在viewDidLoad

中重新排列的代码
_

data = [NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"settings" ofType:@"plist"]];
    NSArray *first = [_data valueForKey:@"Settings"];
    NSArray *second = [_data valueForKey:@"Notifications"];
    NSArray *third = [_data valueForKey:@"Info"];
    NSDictionary *temp =[[NSDictionary alloc]
                         initWithObjectsAndKeys:first, @"Settings",second, @"Notificatitons",third, @"Info",  nil];
    _data = temp;

这是表数据源的配置

#pragma mark - data source 
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return [_data count];
}

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    return [[_data allKeys] objectAtIndex:section];
}
- (NSInteger)tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section
{
    NSString *continent = [self tableView:_testTable titleForHeaderInSection:section];
    return [[_data valueForKey:continent] count];
}


-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *rekebishaCell = @"RekebishaCell";
    NSString *continent = [self tableView:_testTable titleForHeaderInSection:indexPath.section];
    NSString *sub_settings = [[_data valueForKey:continent] objectAtIndex:indexPath.row];

    UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier: rekebishaCell];
    if(cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1
                                       reuseIdentifier:rekebishaCell];
    }
    // config cell ui
    //cell.textLabel.textColor = [UIColor whiteColor];
    cell.textLabel.text = sub_settings;

    return cell;
}

到目前为止,我得到了这个 enter image description here

我需要这个输出 1-设置 2-通知 3-INFO

enter image description here 我很欣赏任何帮助,可能是我一直盯着我的屏幕已经有一段时间了,我的大脑遗失了一些东西,:P

1 个答案:

答案 0 :(得分:0)

NSDictionary不会以有序方式存储键/值。如果您想要它们的订购,您需要将它们全部拉出来并使用不同的结构进行排序,很可能是NSArray

见S.O.回答:

NSDictionary's allKeys array messed up - not in the order they are in the dictionary?