1

我有一个表格视图。也许对于带有 的细胞UITableViewCellStyle1,没关系。

此外,我还有一个要显示的项目列表,快速示例如下:

Gender — Male
Age — 18
Height — 175 cm

以此类推,以获取不同的数据集。也许是一个Human具有属性GenderType gender, NSInteger age,的类float height。我希望它如上所示。此外,这种方法应该是灵活的,我想以我的方式快速而清晰地重新排序这些值。不使用 CoreData。

第一个也是快速的解决方案是制作两个字典并将它们链接到数据库中:

NSDictionary *keys = @{@0 : @"Gender", @1 : @"Age", @2 : @"Height"};
NSDictionary *values = @{@0 : @"Male", @1 : @18, @2 : @"175 cm"};
NSArray *source = @[@0, @1, @2]; // My order

现在我开始使用Pair具有以下属性的类。

@property(nonatomic, strong) NSString *key;
@property(nonatomic, strong) id value;

-(id)initWithKey:(NSString *)key value:(id)value;

现在代码看起来像

Pair *genderPair = [[Pair alloc] initWithKey:@"Gender" value:@"Male"];
Pair *agePair = [[Pair alloc] initWithKey:@"Age" value:@18];
Pair *heightPair = [[Pair alloc] initWithKey:@"Height" value:@175];
NSArray *tableItems = [genderPair, agePair, heightPair];

它看起来更清晰但是......我认为这不是最好的解决方案(并且没有类 Pair,但是人们用开关或其他东西制作类似设置的表格,但他们以某种方式做到了)。我相信很多人都在尝试这样做,并且至少应该有一个更好或通用的解决方案。

4

1 回答 1

0

定义一个类:

@interface Human : NSObject

@property (nonatomic, strong) NSNumber* male; // Or a BOOL if you prefer it 
@property (nonatomic,strong) NSNumber* age; 
@property (nonatomic,strong) NSNumber* height; // Or NSString if you prefer it
                                 // Consider that you may always format the number

- (id) initWithAge: (NSNumber*) age height: (NSNumber*) height male: (NSNUmber*) male;

@end

你总是可以要求一个对象的键:

Human* human=[[Human alloc] initWithAge: @20 height: @178 male: @YES];
NSNumber* age= [human valueForKey: @"age"];

编辑

对不起,我完全误解了你的问题。那么如果你总是对数组中的属性使用相同的位置,我认为没有更好的方法可以做到这一点。
您可以轻松找到每一行的属性,因此您也可以轻松返回表格视图单元格:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell* cell=[[UITableViewCell alloc]initWithStyle: UITableViewCellStyleSubtitle reuseIdentifier: nil];
    Pair* pair= tableItems[ [indexPath indexAtPosition: 1] ];
    cell.textLabel.text= pair.key;
    cell.detailTextLabel.text= [NSString stringWithFormat: @"%@", pair.value];
    return cell;
}

那是 O(1): NSArray 不是链表,您可以在 O(1) 中访问 tableItems[index] 来读取属性。

于 2012-12-25T16:19:20.343 回答