我有一个表格视图。对于UITableViewCellStyle1
的单元格,可能无关紧要。
此外,我还有一个要显示的项目列表,以便快速了解如下:
Gender — Male
Age — 18
Height — 175 cm
等等,用于不同的数据集。也许是具有属性Human
,GenderType gender
,NSInteger age
的课程float height
。我希望它如上所述代表它。此方法也应该灵活,我想以我的方式快速和清晰地重新排序这些值。不使用CoreData。
首先,快速解决方案是制作两个词典并将其链接在DB中:
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];
它看起来更清晰,但是......我认为这不是最好的解决方案(并且没有类对,但是人们使用开关或其他任何东西制作类似设置的表,但他们以某种方式做到了)。我相信很多人都试图这样做,至少应该有一个更好的或一般的解决方案。
答案 0 :(得分: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]来读取属性。