2

私は現在sqliteを使用してTableViewアプリケーションを作成していますが、これまでのところ、意図したとおりに機能します。最初のビューは、米国内のすべての州のリストであり、「州」と呼ばれる1つのセクションにアルファベット順に返されます。私の質問は...このデータのアルファベット順のセクションリストを作成するにはどうすればよいですか?つまり、アラバマ州、アラスカ州、アリゾナ州、アーカンソー州を含む「A」という名前のセクションを作成します。カリフォルニア、コロラド、コネチカットを含む「C」という名前のセクション。基本的に結果を組み合わせて、各状態の最初の文字を探し、一致するものがある場合は、その状態を適切なセクションに配置します。

私はこれを行う方法を説明しているが、sqliteに関連していないいくつかの記事に出くわしました。どんな助けでも大歓迎です!!

前もって感謝します!

4

2 に答える 2

1

まず、これらの非sqliteの例はすべておそらく完全に適切です。NSArrayまたはsqliteデータベースからデータを取得することについて特別なことは何もありません。ともかく、

いくつかのオプション。まず、この例は非常に些細なものなので、おそらく州の名前を読んで(もちろん順序付けられています)、通過しながらモデルを構築します(たとえば、最初の文字を見て、別の最初の文字が新しいセクションを開始する場合など)。

2番目のオプションは、viewDidLoad中にテーブルビューの背後にあるモデルの構築をサポートするために必要な最小限のデータを読み込むことです。私が個人的に使用しているモデルは、SectionオブジェクトのNSMutableArrayであり、これらの各セクションオブジェクトは、セクションヘッダーとRowオブジェクトの配列で構成されています。これらのRowオブジェクトは、データベース内の関連する行の一意の識別子です。次に、そのモデルにデータを入力するために、次のようなSQLステートメントを実行します。

select substr(last_name,1,1), employee_id from employee order by last_name, first_name;

それから、セクションの配列のモデルをループして構築し、セクションごとに、そのセクションの個々のアイテムの一意の識別子の配列を作成します。

他にもたくさんのアプローチがあります。うまくいけば、これはあなたを動かすでしょう。そうでない場合は、テーブルビューの背後にあるモデルの種類と、おそらくあなたが試したことのコードで質問を更新してください。喜んでお手伝いさせていただきます。

于 2012-07-21T14:07:28.773 に答える
0

1つのアプローチは、配列の配列である構造をフィードすることです。配列の各セクションには、同じ最初の州の文字に一致する州の配列が含まれます。次に、この構造に取り組み、データソースとデリゲートメソッドを実装します。

非常によく似た処理を行うことがあるので、構造体(self.browserContents)をフィードするためのコードスニペットを次に示します。私はそれが役立つことを願っています:

BrowserContents *bc = [[BrowserContents alloc] init];

// Create an array to hold the sub arrays
NSInteger sectionCount = [bc getNumberOfCategories]; 
NSMutableArray *sectionsArray = [NSMutableArray arrayWithCapacity:sectionCount];

// Iterate over each section, creating each sub array 
for (int i = 0; i < sectionCount; i++) {
    NSMutableArray *singleSectionArray = [NSMutableArray arrayWithCapacity:1];
    [sectionsArray addObject:singleSectionArray]; 
}

// Fill up each section
 NSMutableArray *contentsTemp = bc.contents;
 for (BrowserStateItem *item in contentsTemp) {
        [(NSMutableArray *)[sectionsArray objectAtIndex:[item categoryId]] addObject:item];
 }

// Iterate over each section array to sort the items in the section 
UILocalizedIndexedCollation *indexedCollation = [UILocalizedIndexedCollation currentCollation];
for (NSMutableArray *singleSectionArray in sectionsArray) 
{
        NSArray *sortedSection = [indexedCollation sortedArrayFromArray:singleSectionArray collationStringSelector:@selector(name)];
        [self.browserContents addObject:sortedSection];
}

注: BrowserContentsは、すべての状態のリスト、カテゴリの数、および属するカテゴリのIDを含む必要があるクラスです(例:A-> 1、B-> 2など...開始する状態がある場合) AとBで)。最後に、「プロフェッショナルiPhoneおよびiPadデータベースアプリケーションプログラミング」という本を確認してください。これは、iOSのデータベースプログラミングを理解するための優れたリソースです。

于 2012-07-21T16:01:31.690 に答える