0

次のように plist ファイルを作成しました。すべてのセクションは同じ構造に従います。

<array>
    <dict>
        <key>image</key>
        <string>gradient1.png</string>
        <key>name</key>
        <string>Section 1</string>
        <key>list</key>
        <array>
            <dict>
                <key>questionTitle</key>
                <string>How are you doing?</string>
                <key>questionInfo</key>
                <string>questionInfo1</string>
            </dict>
            <dict>
                <key>questionTitle</key>
                <string>What are you doing?</string>
                <key>questionInfo</key>
                <string>questionInfo2</string>
            </dict>
            <dict>
                <key>questionTitle</key>
                <string>Where are you going</string>
                <key>questionInfo</key>
                <string>questionInfo3</string>
            </dict>
        </array>
    </dict>

これをネストしたテーブルで使用しています。セクションのタイトルに「名前」を使用し、さまざまな質問とそれに関連する情報を含む新しい配列を作成したいと考えています..

- (void) setCategoryArray
{
    NSURL *url = [[NSBundle mainBundle] URLForResource:@"QuestionList" withExtension:@"plist"];
    NSArray *mainArray = [[NSArray alloc] initWithContentsOfURL:url];
    NSMutableArray *categoryArray = [[NSMutableArray alloc] initWithCapacity:[mainArray count]];
    for (NSDictionary *dictionary in mainArray) {
        Category *category = [[Category alloc] init];
        category.name = [dictionary objectForKey:@"name"];
        category.list = [dictionary objectForKey:@"list"];
        questionList = category.list;
        NSLog(@"%@", questionList);
        category.image = [dictionary objectForKey:@"image"];
        [categoryArray addObject:category];
    }
    NSMutableArray *questionArray = [[NSMutableArray alloc] initWithCapacity:nil];
    for (NSDictionary *dictionary in questionList) {
        Category *question = [[Category alloc] init];
        question.questionTitle = [dictionary objectForKey:@"questionTitle"];
        question.questionInfo = [dictionary objectForKey:@"questionInfo"];
        [questionArray addObject:question];
    }
    self.categoryList = categoryArray;
    self.questionList = questionArray;

}

questionArray を作成する方法またはテーブルのラベルでそれを参照する方法 (以下を参照) におそらく問題があると思いますが、すべてのセルに対して同じエントリを取得します (ただし、最初または最後のエントリが繰り返されるわけではありません)。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"SavedCell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    Category *question = (Category *)[self.questionList objectAtIndex:indexPath.section];
    UILabel *questionNameLabel = (UILabel *)[cell viewWithTag:101];
    questionNameLabel.text = question.questionTitle;

    return cell;
}

助けてくれてどうもありがとう!

4

1 に答える 1

2

わかりました、私はあなたの問題を見つけたと思います。

最初の for ループでに設定questionListしています。category.listその for ループは、questionArrayループが実行される前に終了します (したがって、2 番目の for ループはquestionList、最後の 1 つに対してのみ実行されます)。

あなたが求めている解決策は、最初の for ループの中に 2 番目の for ループを配置することだと思います。

    for (NSDictionary *dictionary in mainArray) {
        Category *category = [[Category alloc] init];
        category.name = [dictionary objectForKey:@"name"];
        category.list = [dictionary objectForKey:@"list"];
        category.image = [dictionary objectForKey:@"image"];
        [categoryArray addObject:category];

        NSMutableArray *questionArray = [[NSMutableArray alloc] initWithCapacity:nil];
        for (NSDictionary *dictionary in category.list) {
            Category *question = [[Category alloc] init];
            question.questionTitle = [dictionary objectForKey:@"questionTitle"];
            question.questionInfo = [dictionary objectForKey:@"questionInfo"];
            [questionArray addObject:question];
        }
        [self.questionList addObject:questionArray];
    }
    self.categoryList = categoryArray;

そして、質問は次のようにcellForRowAtIndexPathなります。

Category *question = (Category *)[[self.questionList objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];

私はこれをテストしていませんが、機能することを願っています。または、いくつかの NSLog を使用して、機能するソリューションに近づけることができます。

于 2013-02-06T12:33:51.660 に答える