2014-03-06 3 views
0

PHP 파일에서 데이터를 보내고 가져 오는 데 다른 코드를 사용해도 결과가 제대로 표시되지 않습니다. 지금까지 검색 결과가 그러나 출력 디버거 (json 형식)는 Xcode 시뮬레이터가 아닙니다. 내가 뭔가를 놓친 것 같아! PHP 파일에서Xcode의 PHP 파일에서 데이터를 검색합니다.

- (void) retrieveData 
{ 



NSString * jack=[GlobalVar sharedGlobalVar].gUserName; 
NSLog(@"global variable %@", jack); 



NSString *rawStr = [NSString stringWithFormat:@"StudentID=%@",jack]; 
NSData *data = [rawStr dataUsingEncoding:NSUTF8StringEncoding]; 

NSURL *url = [NSURL URLWithString:@"http://m-macbook-pro.local/studentCourses.php"]; 
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; 

[request setHTTPMethod:@"POST"]; 
[request setHTTPBody:data]; 

NSURLResponse *response; 
NSError *err; 
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&err]; 
NSLog(@"responseData: %@", responseData); 

    jsonArray=[NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil]; 

// Search for the array parameter that should be added 
coursesArray=[[NSMutableArray alloc] init]; 
//set up our cities array 

NSString *strResult = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; 
NSLog(@"me: %@", strResult); 



//loop through our json array 

for (int i = 0 ; i <coursesArray.count; i++) 
{ 
    NSString * cName = [[coursesArray objectAtIndex:i] objectForKey:@"CourseName"]; 

    //Add the City object to our cities array 
    [coursesArray addObject:[[Course alloc]initWithCourseName:cName]]; 

} 

//Reload our table view 
[self.tableView reloadData]; 
} 

그렇지 다시 서버에서 오는 드 responseData와 함께, 귀하의 게시물 데이터와 JSON 배열을 만드는 것 같습니다

echo json_encode($records); 

답변

0

.

//change this 
jsonArray=[NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil]; 
//to this 
jsonArray=[NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:nil]; 

또한 게시 한 코드에 따라 서버에서 반환 한 결과를 coursesArray에 추가 한 것처럼 보이지 않습니다. 루프에서 cName을 만드는 곳에서 원하는 것은 PHP 호출 (jsonArray)의 결과에서 코스 이름을 가져 와서 코스 배열에 추가하는 것입니다. 당신이 그것을 설정 한 방법은 코스 배열에서 결과를 얻고 그것을 스스로 추가하는 것입니다.

for 루프는 당신이 코드를 사용해보십시오 : 나는 coursesArray 당신의 tableview에 대한 데이터가 포함되어 있으리라 믿고있어 코드에

for (int i = 0 ; i <jsonArray.count; i++) 
{ 
    NSString * cName = [[jsonArray objectAtIndex:i] objectForKey:@"CourseName"]; 

    [coursesArray addObject:[[Course alloc]initWithCourseName:cName]]; 

} 

를 기준으로합니다.

프로덕션 응용 프로그램에서 동기 요청을 사용하는 것이 주 스레드에서 실행되고 UI를 차단하므로 사용하지 않는 것이 좋습니다.

+0

도움을 주셔서 감사합니다. 문제가 해결되었습니다. 그러나 "UI를 차단하겠습니까?"라는 것이 무슨 뜻인지 물어볼 수 있습니까? .. 이제 우리는 다른 탐색 컨트롤러에 대해 동일한 코드를 사용하고 있으며 오류 (스레드 1 : 신호 SIGABRT)가 표시되므로 동기 요청이 이러한 종류의 문제를 일으킬 수 있습니까? – mimi12

+0

사용자 인터페이스가 주 스레드에서 처리된다는 의미입니다. 기본 스레드에서 웹 요청을 수행하는 경우 사용자 인터페이스는 요청로드가 완료 될 때까지 고정 상태로 나타납니다. 나는 그것에 대해 더 많이 알지 못해서 그것이 당신의 충돌을 일으킬 것인지 말할 수 없다. 당신이 그것을 이해할 수 없다면 나는 그것을 통해 작동하도록 별도의 질문을 게시하는 것이 좋습니다 것입니다. – digitalHound

관련 문제