1

テーブルビューがあります。たぶん、のセルではUITableViewCellStyle1、それは問題ではありません。

また、以下の簡単な例として、表示するアイテムのリストがあります。

Gender — Male
Age — 18
Height — 175 cm

異なるデータセットの場合も同様です。Humanたぶん、プロパティGenderType gender、、、NSInteger ageを持つクラスfloat height。そして、私はそれを上記のように表現したいと思います。また、このアプローチは柔軟である必要があります。これらの値を自分のやり方ですばやく明確に並べ替えたいと思います。CoreDataを使用せずに。

最初の迅速な解決策は、2つの辞書を作成し、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];

より明確に見えますが...これは最善の解決策ではないと思います(クラスペアはありませんが、スイッチなどを使用してテーブルのような設定を行いますが、どういうわけかそれを行います)。私は、これを行おうとしている多くの人々が、少なくともより良いまたは一般的な解決策があるはずだと信じています。

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 に答える