0

json で解析されたデータを表示するために uitableview を使用しています。解析されたデータは配列に格納され、配列リストは uitableview に 100 割り当てられます。しかし、{forloop}の objectAtIndex でクラッシュし、クラッシュ レポートが次のように表示されます。

キャッチされない例外 'NSInvalidArgumentException' が原因でアプリを終了しています。理由: '-[NSMutableArray insertObject:atIndex:]: nil オブジェクトを 0' に挿入しようとしています*

助けてください

   - (void)viewDidLoad
{
    self.responseData = [NSMutableData data];
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:openexchangeURl]];
    [[NSURLConnection alloc] initWithRequest:request delegate:self];
    [super viewDidLoad];

}

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
{
    [responseData setLength:0];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
{
    [responseData appendData:data];
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
    [connection release];
    self.responseData = nil;
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{
    [connection release];

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

    values = [responseString JSONValue];
    array = [[NSMutableArray alloc] init];
    NSMutableArray *arrTitle = [[NSMutableArray alloc] init];
    NSMutableArray *arrValues = [[NSMutableArray alloc] init];
    array =[values valueForKey:@"rates"];

    NSLog(@"array values:--> %@",array);
//    NSLog(@"values:--> %@",values);
//    NSLog(@"Particular values:--> %@",[[values valueForKey:@"rates"] valueForKey:@"AED"]);

    tempDict1 = (NSMutableDictionary *)array;            
    NSArray *arr;// =[[NSArray alloc]init];
    arr = [[tempDict1 valueForKey:@"rates"] componentsSeparatedByString:@";"];
    NSLog(@"arr-->%@",arr);
    NSString *subStar = @"=";
    [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 objectForKey:@"AED"]);

    [array retain];
    [tbl_withData reloadData];

}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    NSLog(@"array-->%@",array);
    return [array count];

}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    intIndexPath = indexPath.row;
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil)
    {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
        cell.textLabel.adjustsFontSizeToFitWidth = YES; 
        cell.textLabel.font = [UIFont systemFontOfSize:8]; 
        cell.textLabel.numberOfLines = 4; 

    }

//    NSLog(@"data is like:--> %@",array);
//    cell.textLabel.text= [NSString stringWithFormat:@"%@",[array objectAtIndex:intIndexPath]];
    cell.textLabel.text =[array objectAtIndex:intIndexPath];

    return cell;
}
4

2 に答える 2

0

サーバーから正しい形式でデータを取得します...あなたの状況では、データは1つの配列にあります。したがって、別の異なる配列で作成します。

{"reply":["AED = 3.673188","AFN = 48.5725","","","",""]}

または、応答を解析して、単一の単一データを別の配列に保存することもできます...

于 2012-09-12T14:42:15.870 に答える
0

配列には項目が 1 つしかありません。ここにオブジェクトを 1 つだけ追加します。

array = [[NSMutableArray alloc] init];
[array addObject:[values valueForKey:@"rates"]];

[values valueForKey:@"rates"]から取得した値を配列変数に割り当てる必要があります。また、配列変数を値を保持するプロパティにします。

@property (nonatomic, strong) NSArray *array;

次に、それをプロパティに割り当てます。

self.array  = [values valueForKey:@"rates"];

また、セルのすべてのスタイリングを、新しいセルを作成する場合に移動します。セルのスタイルを毎回変更する必要がないため、これにより速度が向上します。

- (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.textLabel.adjustsFontSizeToFitWidth = YES;  
       cell.textLabel.font = [UIFont systemFontOfSize:8];  
       cell.textLabel.numberOfLines = 4;  

    }
    NSLog(@"data is like:--> %@",array);
    //    NSString *cellValue =[array objectAtIndex:indexPath.row];
    //    cell.textLabel.text = cellValue;

    cell.textLabel.text= [NSString stringWithFormat:@"%@",[array objectAtIndex:indexPath.row]];

    return cell;
}
于 2012-09-12T13:06:20.343 に答える