2012-01-07 100 views
2

在服務器端,我有這樣的代碼來提供JSON我的iPhone應用程序:爲什麼-stringWithContentsOfURL:在這裏爲我的JSON通信返回nil?

 $val = array("a", "b", "c","d"); 
     return json_encode($val); 

在該應用程序,我嘗試使用下面的代碼與服務器進行通信:

NSError *error = nil; 

NSString *szURL [email protected]"http://192.168.1.159/return.php"; 

NSURL *url = [NSURL URLWithString:szURL]; 

NSString *strData = [NSString stringWithContentsOfURL:url 
              encoding:NSUTF8StringEncoding 
               error:&error]; 

NSArray *appLists = (NSArray *)[strData JSONValue]; 

但是,strData總是零。爲什麼會發生這種情況,我能做些什麼來阻止它?

+4

它是零,因爲您的http傳輸發生錯誤。檢查你的錯誤變量的值,看看它失敗的原因。 – 2012-01-07 08:04:56

+0

如果另一端的JSON文件的編碼與HTTP標頭中指定的編碼不匹配,我就會看到這種情況發生了幾次。 – reddersky 2012-02-03 18:25:05

回答

0

我會建議,除非您希望您的請求同步發生並阻止用戶界面,請使用NSURLConnection或第三方解決方案執行異步請求。我喜歡http://three20.infoTTURLRequest,因爲它可以很容易指定報頭,從數據獲取JSON值等的示例調用是這樣的:

TTURLRequest *request = [[TTURLRequest alloc] initWithURL:@"http://192.168.1.159/return.php" delegate:self]; 
request.httpMethod = @"GET"; 
request.response = [[[TTURLJSONResponse alloc] init] autorelease]; 
request.cachePolicy = TTURLRequestCachePolicyNone; 
[request send]; 

那麼你的委託必須實現這些方法:

-(void)requestDidFinishLoad:(TTURLRequest *)request; 
-(void)request:(TTURLRequest *)request didFailLoadWithError:(NSError *)error; 
相關問題