2013-05-10 2 views
1
- (void)viewDidLoad { 

self.detailView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 480) style:UITableViewStylePlain]; 
self.detailView.dataSource = self; 
self.detailView.delegate = self; 
self.detailView.multipleTouchEnabled=YES; 
[self.view addSubview:self.detailView]; 
[super viewDidLoad]; 
self.title = NSLocalizedString(@"Routes", nil); 
self.detailArray = [[NSMutableArray alloc] init]; 
NSString *url = [NSString stringWithFormat:@"http://maps.googleapis.com/maps/api/directions/json?origin=Chennai&destination=Madurai&sensor=false"]; 
NSURL *googleRequestURL=[NSURL URLWithString:url]; 
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
NSData* data = [NSData dataWithContentsOfURL: googleRequestURL]; 
NSString *someString = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]; 
NSError* error; 
NSMutableDictionary* parsedJson = [NSJSONSerialization JSONObjectWithData:data    options:kNilOptions error:&error]; 
NSArray *allkeys = [parsedJson allKeys]; 

for(int i = 0; i < allkeys.count; i++){ 

if([[allkeys objectAtIndex:i] isEqualToString:@"routes"]){ 
NSArray *arr = [parsedJson objectForKey:@"routes"]; 
NSDictionary *dic = [arr objectAtIndex:0]; 
NSArray *legs = [dic objectForKey:@"legs"]; 
for(int i = 0; i < legs.count; i++){ 
NSArray *stepsArr = [[legs objectAtIndex:i] objectForKey:@"steps"]; 
for (int i = 0; i < stepsArr.count; i++) { 
NSLog(@"HTML INSTRUCTION %@", [[stepsArr objectAtIndex:i] objectForKey:@"html_instructions"]); 
NSLog(@"############################"); 
[self.detailArray addObject:[[stepsArr objectAtIndex:i] objectForKey:@"html_instructions"] ]; 
       } 
      } 

     } 

    }   
});  
} 

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

-(NSInteger) tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section{ 
return [self.detailArray count]; 

} 


-(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]; 
} 


UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10.0f, 5.0f, 300.0f, 30.0f)]; 
label.text=[NSString stringWithFormat:@"%@",[self.detailArray objectAtIndex:indexPath.row]]; 
label.numberOfLines = 3; 
label.font = [UIFont fontWithName:@"Helvetica" size:(12.0)]; 
label.lineBreakMode = UILineBreakModeWordWrap; 
label.textAlignment = UITextAlignmentLeft; 
[cell.contentView addSubview:label]; 
[label release]; 

return cell; 
} 

테이블 뷰에 detailArray를 표시하려고합니다. 그러나 테이블 뷰에 null 값을 표시합니다. NSlog에는 현재 값이 표시됩니다. direction 값이 설정된 detailArray입니다. TableView.if에 표시 할 수있는 모든 것이 가능합니다. displayArray의 상수 값을 TableView에 올바르게 표시합니다. 아무도 알지 못하면 도와주세요. 나는 당신의 귀중한 답변을 기다리고 있습니다. 고마워요.NSMutableArray 테이블 뷰의 Null 값 표시

+0

detailArray에 값을 추가 한 직후에 중단 점을 추가하여 detailArray에 값이 있는지 확인하십시오. – Anila

+0

왜 'cellForRowAtIndexPath :'에서 테이블 뷰에 위임자를 설정 했습니까? 왜 cellForRowAtIndexPath :'method ??에서 테이블 뷰를 다시 읽어 들일 것인가? 'cellForRowAtIndexPath : method'에서이 두 줄을 지우십시오. tableView.delegate = self; 및 [self.detailView reloadData]; –

+0

값을 보정하는 아닐라 세부 배열. –

답변

1

은 ... 후 모든 데이터 (값) 이후에 그것을 유지하고 울부 짖는 소리처럼있는 TableView를 다시 추가

업데이트

[self.detailArray retain]; 
[self.detailView reloadData]; 

내가 당신의 문제가 해결 확신 ... :)

+0

나는 그 두 줄을 지우지 만 변화는 없다. 나를 도와 줘. –

+0

set label.textColor = [UIColor blackColor]; 또한 모든 lable에서 텍스트 테스트를 설정해보십시오. –

+0

색상을 추가했으나 Null 값을 표시합니다. –

1

cellForRowAtIndexPath 방법에서 [self.detailView reloadData];을 제거하십시오. 동일한 방법으로 tableView.delegate = self;도 삭제하십시오.

이고 [super viewDidLoad];viewDidLoad의 맨 위에 써야합니다.

다음 네 가지 배열을 변경하십시오.

NSArray *legs=(NSArray *)[dic objectForKey:@"legs"]; 
    NSArray *arr = (NSArray *)[parsedJson objectForKey:@"routes"]; 
    NSArray *legs = (NSArray *)[dic objectForKey:@"legs"]; 
    NSArray *stepsArr = (NSArray *)[[legs objectAtIndex:i] objectForKey:@"steps"]; 
+0

나는 그 두 줄을 삭제하지만 아무런 변화도 없습니다. 나를 도와주세요. –

+0

print parsedJson 그것은 무엇을 인쇄합니까? –

+0

두 개의 routes.eg:(lat,long,dis,route).i 사이에 전체 세부 정보를 표시합니다.이 경로 값을 추출하여 detailArray에 저장합니다. –

0

왜 viewDidLoad에서 detailView 대리인과 데이터 소스를 두 번 설정하고 있습니까? 먼저 코드를 형식화하여 문제를 쉽게 설명 할 수 있습니다.

self.detailView.dataSource=self; 
self.detailView.delegate=self; 
self.detailView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 480) style:UITableViewStylePlain]; 
self.detailView.dataSource = self; 
self.detailView.delegate = self;