2

私は、異なる配列から5つの値を保存したことに対応するNSDictionaryに5つのキーを保存する必要があります。私のデータ構造は次のようになります。

辞書は{

1 =     (
                {
            SubRegionName = "abc";
            WalkId = 123;
            WalkName = xyz;
        },
        {
        },....
2 =     (
                {
            SubRegionName = "abc";
            WalkId = 123;
            WalkName = xyz;
        },
        {
        },....
3 =     (
                {
            SubRegionName = "abc;
            WalkId = 123;
            WalkName = xyz;
        },
        {
        },....
4 =     (
                {
            SubRegionName = "abc";
            WalkId = 123;
            WalkName = xyz;
        },
        {
        },....
5 =     (
                {
            SubRegionName = "abc";
            WalkId = 123;
            WalkName = xyz;
        },
        {
        },
        )

上記のデータは、tempId(1,2,3,4,5) と言う Id に従って sqlite から取得しており、それらを個別に使用したいと考えています。tableview で walkName を cell.textlabel.text として表示し、SubregionName を cell.detailtext.text として表示する必要があるためです。

辞書からこのデータにアクセスする方法がわかりません。誰でも正しい方法を教えてください。

私のコードは次のとおりです。

///データベース クエリの場合 (データベースからデータを取得するため)** * ** * ** * **

-(void)getMainRegions
{
    sqlite3 *walkNameDB;
    if (sqlite3_open([[self databasePath] UTF8String], &walkNameDB) != SQLITE_OK) {
        sqlite3_close(walkNameDB);
        NSAssert(0, @"Failed to open Walk name database");
    }



    NSString *regionQuery = @"SELECT Rid,RName from MainRegions";

    sqlite3_stmt *teststatement = nil;

   // NSLog(@"%d",sqlite3_prepare_v2(walkNameDB,[regionQuery UTF8String], -1, &teststatement, nil));

    if (sqlite3_prepare_v2(walkNameDB,[regionQuery UTF8String], -1, &teststatement, nil) == SQLITE_OK)
    {
        RNameArray = [[NSMutableArray alloc] init];
        RIdArray = [[NSMutableArray alloc] init];

        while( sqlite3_step(teststatement) == SQLITE_ROW )
        {

            NSNumber *RId;
            int temp1 = (int)sqlite3_column_int(teststatement, 0);
            RId = [[NSNumber alloc] initWithInt:temp1];

            char *RNameCharacter;
            RNameCharacter = (char *) sqlite3_column_text(teststatement, 1);
            NSString *RNameString = [[NSString alloc] initWithUTF8String:RNameCharacter];

            [RNameArray addObject:RNameString];
            [RIdArray addObject:RId];


        }

    }
    [self getWalks];
}

-(void)getWalks
{
    sqlite3 *walkNameDB;
    if (sqlite3_open([[self databasePath] UTF8String], &walkNameDB) != SQLITE_OK) {
        sqlite3_close(walkNameDB);
        NSAssert(0, @"Failed to open Walk name database");
    }

    RegionWalksDictionary = [[NSMutableDictionary alloc] init];

    for(regionId in RIdArray)
    {
        regionWalkArray = [[NSMutableArray alloc] init];
        NSString *walkQuery = [[NSString alloc] initWithFormat:@"SELECT Wid,WName,SName from Walks,SubRegions WHERE Walks.Sid=SubRegions.Sid AND Rid = %d",[regionId integerValue] ];

        sqlite3_stmt *walkstatement = nil;

     //   NSLog(@"%d",sqlite3_prepare_v2(walkNameDB,[walkQuery UTF8String], -1, &walkstatement, nil));

        if (sqlite3_prepare_v2(walkNameDB,[walkQuery UTF8String], -1, &walkstatement, nil) == SQLITE_OK)
        {
            while( sqlite3_step(walkstatement) == SQLITE_ROW )
            {
                NSNumber *WId;
                int temp1 = (int)sqlite3_column_int(walkstatement, 0);
                WId = [[NSNumber alloc] initWithInt:temp1];

                char *WNameCharacter;
                WNameCharacter = (char *) sqlite3_column_text(walkstatement, 1);
                NSString *WNameString = [[NSString alloc] initWithUTF8String:WNameCharacter];

                char *SNameCharacter;
                SNameCharacter = (char *) sqlite3_column_text(walkstatement, 2);
                NSString *SNameString = [[NSString alloc] initWithUTF8String:SNameCharacter];

                NSMutableDictionary *tempWalk = [[NSMutableDictionary alloc] init];
                [tempWalk setObject:WId forKey:@"WalkId"];
                [tempWalk setObject:WNameString forKey:@"WalkName"];
                [tempWalk setObject:SNameString forKey:@"SubRegionName"];
                [regionWalkArray addObject:tempWalk];
            }
        }


        [RegionWalksDictionary setObject:regionWalkArray forKey:regionId];
     //   NSLog(@"arr%@",RegionWalksDictionary);

    }

}

// * ** データベースからデータを取得するメソッドはここで終了* ** * ** * ** * ****

4

4 に答える 4

0

ああ!今、私はそれを見ました-長さ1の5つの配列があります

NSArray *array1 = dict[@"1];
NSDictionary *details = array1[0];

//print each var
id WalkName = details[@"WalkName"];
于 2012-12-17T09:02:50.623 に答える
0

NSDictionary5 つのキーを持つ があり、その中に である単一の要素を持つがNSArrayあるようNSDictionaryです。私は間違っているかもしれませんが、これを試してください:

NSDictionary *dictionaryForKey1 = [[myDictionary objectForKey:@"1"] objectAtIndex:0];

次に、これを使用できます。

NSString *walkName = [dictionaryForKey1 objectForKey:@"WalkName"];
于 2012-12-17T08:06:19.907 に答える
0

これを試して

NSString * walkName = [[parentDic objectForKey:[NSString stringWithFormat:@"%d",indexPath.row]] objectForKey:@"WalkName"];
NSString * SubregionName = [[parentDic objectForKey:[NSString stringWithFormat:@"%d",indexPath.row]] objectForKey:@"SubRegionName"];
于 2012-12-17T08:14:55.043 に答える
0

この方法を試してみてください...

for(id dict in RegionWalksDictionary){

        NSLog(@"WalkId: %@",[[[RegionWalksDictionary objectForKey:dict]objectAtIndex:0]objectForKey:@"WalkId"] );
        NSLog(@"WalkName: %@",[[[RegionWalksDictionary objectForKey:dict]objectAtIndex:0]objectForKey:@"WalkName"] );
        NSLog(@"SubRegionName: %@",[[[RegionWalksDictionary objectForKey:dict]objectAtIndex:0]objectForKey:@"SubRegionName"] );
        NSLog(@"----");

}

私は次のように使用しました(これが構造またはデータでない場合はコメントしてください)

NSMutableDictionary *RegionWalksDictionary=[NSMutableDictionary new];
NSMutableArray *regionWalkArray=[NSMutableArray new];
NSMutableDictionary *tempWalk=[NSMutableDictionary new];

[tempWalk setObject:@"wk1" forKey:@"WalkId"];
[tempWalk setObject:@"wkName1" forKey:@"WalkName"];
[tempWalk setObject:@"srName1" forKey:@"SubRegionName"];

[regionWalkArray addObject:tempWalk];

[RegionWalksDictionary setObject:regionWalkArray forKey:@"1"];
[RegionWalksDictionary setObject:regionWalkArray forKey:@"2"];
[RegionWalksDictionary setObject:regionWalkArray forKey:@"3"];

NSLog(@"tempWalkd dict is %@",RegionWalksDictionary);
于 2012-12-17T08:23:58.597 に答える