How to assign values from NSMutableDictionary to N

2020-02-16 04:47发布

I am doing JSON parsing and I want to show my parsed data in a UITableView.

For that, I am trying to assign parsed data from NSMutableDictionary to NSArray to show in the table view but the array returns null.

Here my array returns null value;

NSMutableDictionary *tempDict1;
NSArray *arr = [[tempDict1 valueForKey:@"rates"]  componentsSeparatedByString:@";"];

code

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{
    [connection release];

    NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
    self.responseData = nil;

    //    NSArray *latestrates = [[responseString JSONValue] objectForKey:@"rates"];
    [responseString release];

    values = [responseString JSONValue];
    array = [[NSMutableArray alloc] init];
    array = [values valueForKey:@"rates"];
    NSLog(@"array values:--> %@",array);


    tempDict1 = (NSMutableDictionary *)array;  
    arr = [[tempDict1 valueForKey:@"rates"]  componentsSeparatedByString:@";"];
    NSString *subStar = @"=";
    NSMutableArray *arrTitle = [[NSMutableArray alloc] init];
    NSMutableArray *arrValues = [[NSMutableArray alloc] init];
    [arrTitle removeAllObjects];
    [arrValues removeAllObjects];
    for (int i=0; i<[arr count]-1; i++)
    {
        [arrTitle addObject:[[arr objectAtIndex:i] substringToIndex:NSMaxRange([[arr objectAtIndex:i] rangeOfString:subStar])-1]];
        [arrValues addObject:[[arr objectAtIndex:i] substringFromIndex:NSMaxRange([[arr objectAtIndex:i] rangeOfString:subStar])]];
        NSLog(@"arrTitle is:--> %@",arrTitle);
    }

    tempDict1 = (NSMutableDictionary*)[array objectAtIndex:0];
    array = [values valueForKey:@"rates"];
    NSLog(@"tempDict--%@",tempDict1);

    [arr retain];
    [tbl_withData reloadData];

}

2条回答
三岁会撩人
2楼-- · 2020-02-16 05:10

Try editing fourth line in connectionDidFinishLoading to

values = [responseString JSONFragments];
查看更多
成全新的幸福
3楼-- · 2020-02-16 05:13
NSError *error = nil;
NSArray *array = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingMutableContainers error:&error];
NSLog(@"Your data - %@",array);

Now you can get it according to data format.

EDIT

I think you also dont know how to get a webResponse.
So here is a way to get webResponse - First set XML delegate in your ViewController.h class and declare a NSMutableData globaly

@interface ViewController : UIViewController<NSXMLParserDelegate>
@property(nonatomic, retain)NSMutableData  *responseData;
@end

Now synthesized this responseData in your ViewController.m class

@synthesize responseData = _responseData;

Now you can send request on server in viewDidLoad: method its up to you in which method you want to send it.

-(void)viewDidLoad
{

    NSString *urlString = [NSString stringWithFormat:@"http://EnterYourURLHere"];

    NSURL *URL = [NSURL URLWithString:urlString];
    NSMutableURLRequest *urlRequest = [[NSMutableURLRequest alloc]init];
    [urlRequest setURL:URL];
    [urlRequest setHTTPMethod:@"POST"];
    [urlRequest setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-type"];

    NSURLConnection *urlConnection = [[NSURLConnection alloc]initWithRequest:urlRequest delegate:self];
    if(!urlConnection)
    {
        [[[UIAlertView alloc]initWithTitle:@"OOoopppssS !!" message:@"There is an error occured. Please check your internet connection or try again." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil] show];
    }

}

#pragma mark - Parsing delegate methods

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    self.responseData = [[NSMutableData alloc]init];
    [self.responseData setLength:0];
}

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    [self.responseData appendData:data];
}

-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    //Now parse your data here -
    NSError *error = nil;
    NSArray *array = [NSJSONSerialization JSONObjectWithData:self.responseData options:NSJSONReadingMutableContainers error:&error];
    NSLog(@"Your data - %@",array);
}
查看更多
登录 后发表回答