简体   繁体   中英

NSMutableArray and NSMutableDictionary issue

I m implementing the concept of sectioned tableview and struck at a particular point. I have a NSMutableArray with 2 objects like this:

<__NSArrayI 0xabf8c00>(
    {
        City = "SanFransisco ";
        Latitude = "28.602704";
        Longitude = "-81.430760";
        State = California;
    },
    {
        City = Orlando;
        Latitude = "28.49379";
        Longitude = "-81.474251";
        State = Florida;
    },

    )
    ,
    <__NSCFArray 0xab38ec0>(
    {
        geometry =     {
            location =         {
                lat = "37.789632";
                lng = "-122.417004";
            };
        };
        name = "St. Francis Memorial Hospital";
        vicinity = "900 Hyde Street, San Francisco";
    },
    {
        geometry =     {
            location =         {
                lat = "37.794363";
                lng = "-122.395784";
            };
        };
        name = "St Memorial Hospital";
        vicinity = "5 Embarcadero Center, San Francisco";
    },
    {
        geometry =     {
            location =         {
                lat = "37.788297";
                lng = "-122.409653";
            };
        };
        name = "Global Memorial Hospital";
        vicinity = "490 Post Street #520, San Francisco";
    },
    )

I m loading these 2 objects in two sections of tableView. But, I couldnot get how to compare and take in NSMutableDictionary for each key(city,latitude,longitude)of fist object and lat,lng,vicinity of second object. I have done like this but Im getting error : **SIGABRT error**

EDIT :

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault    reuseIdentifier:CellIdentifier]autorelease];
        cell.accessoryType= UITableViewCellAccessoryDetailDisclosureButton;
        cell.selectionStyle = UITableViewCellSelectionStyleNone;



    }

    NSMutableArray *array = [listOfItems objectAtIndex:indexPath.section];
    int section=indexPath.section;


    if(section==0)
    {

        for (int i=0;i<[array count];i++)
        {

        cell.textLabel.text = [[array  objectAtIndex:i] objectForKey:@"City"] ;

        cell.textLabel.tag=3;
        cell.textLabel.font=[UIFont boldSystemFontOfSize:12];

        NSString *lat=[NSString stringWithFormat:@"%@",[[array  objectAtIndex:i] objectForKey:@"Latitude"]];
        UILabel *latitude = [[UILabel alloc]initWithFrame:CGRectMake(10, 50, 320, 10)];
        latitude .font=[UIFont fontWithName:@"TimesNewRomanPS-BoldMT" size:12];
        [latitude  setTextAlignment:UITextAlignmentLeft];
        latitude.text=[NSString stringWithFormat:@"%@",lat];
        latitude.tag=1;
        [cell addSubview:latitude ];
        latitude.hidden=YES;
        [latitude release];


        NSString *lng=[NSString stringWithFormat:@"%@",[[array  objectAtIndex:i] objectForKey:@"Longitude"]];
        UILabel *longitude = [[UILabel alloc]initWithFrame:CGRectMake(10, 80, 320, 10)];
        longitude .font=[UIFont fontWithName:@"TimesNewRomanPS-BoldMT" size:12];
        [longitude  setTextAlignment:UITextAlignmentLeft];
        longitude.text=[NSString stringWithFormat:@"%@",lng];
        longitude.tag=2;
        [cell addSubview:longitude ];
        longitude.hidden=YES;
        [longitude release];


         return cell;

    }
    }

    if(section==1)
    {




        for (int i=0;i<[array count];i++)
        {


             cell.textLabel.text =[[array  objectAtIndex:i] objectForKey:@"name"] ;

            cell.textLabel.lineBreakMode=UILineBreakModeWordWrap;
            cell.textLabel.numberOfLines=0;
            cell.textLabel.font=[UIFont boldSystemFontOfSize:12];
            cell.textLabel.tag=3;



            NSMutableDictionary * location = [[[array objectAtIndex:indexPath.row]objectForKey:@"geometry"]objectForKey:@"location"];
            NSString * lat = [location objectForKey:@"lat"];
            NSString * lng = [location objectForKey:@"lng"];

            UILabel *latitude = [[UILabel alloc]initWithFrame:CGRectMake(10, 80, 320, 10)];
            latitude .font=[UIFont fontWithName:@"TimesNewRomanPS-BoldMT" size:12];
            [latitude  setTextAlignment:UITextAlignmentLeft];
            latitude.text=[NSString stringWithFormat:@"%@",lat];

            latitude.tag=1;
            [cell addSubview:latitude ];
            latitude.hidden=YES;
            [latitude release];



            UILabel *longitude = [[UILabel alloc]initWithFrame:CGRectMake(10, 85, 320, 10)];
            longitude .font=[UIFont fontWithName:@"TimesNewRomanPS-BoldMT" size:12];
            [longitude  setTextAlignment:UITextAlignmentLeft];
            [longitude  setText:[NSString stringWithFormat:@"%@",lng]];
            longitude.tag=2;
            [cell addSubview:longitude ];
            longitude.hidden=YES;
            [longitude release];


            NSString *vicinity1 = [[array objectAtIndex:indexPath.row]objectForKey:@"vicinity"];
            UILabel *vicinity = [[UILabel alloc]initWithFrame:CGRectMake(10, 45, 320, 10)];
            vicinity .font=[UIFont fontWithName:@"TimesNewRomanPS-BoldMT" size:12];
            [vicinity  setTextAlignment:UITextAlignmentLeft];
            vicinity.text=[NSString stringWithFormat:@"%@",vicinity1];

            vicinity.tag=4;
            [cell addSubview:vicinity ];
            vicinity.hidden=YES;
            [vicinity release];



             return cell;



        }


    }



}

Where I m going wrong this time?

By your error I understand that your variable dictionary is not actually a dictionary but an array.

try using this :

NSMutableArray *array = [listOfItems objectAtIndex:indexPath.row];
cell.textLabel.text = [[array  objectAtIndex:0] objectForKey:@"City"];

If this returns something(or some name) maybe you can change your logic accordingly and get the desired result.

Let me know if it works :)

EDIT :

int section=indexPath.section;


    if(section==0)
    {
        NSMutableArray *array = [listOfItems objectAtIndex:indexPath.row];

        for (int i=0;i<[array count];i++)
        {

        cell.textLabel.text = [[array  objectAtIndex:i] objectForKey:@"City"] ;

        cell.textLabel.tag=3;
        ....

indexPath.section will always return 0

Try this :)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM