2013-07-04 70 views
-1

我有兩個問題:問題與返回的JSON數組

1.I想在我的應用程序加載的JSON信息,就是現在 '的NSLog(@ 「陣:%@」,self.news);'不顯示任何東西,但如果我把它放在'(void)connectionDidFinishLoading:(NSURLConnection *)連接'它的作品,你能告訴我爲什麼嗎?

//making request query string 
NSString *requestUrl = [NSString 
         stringWithFormat:@"%@jsons/json.php?go=product_info&latitude=%g&longitude=%g&identifire=%@&pid=%ld&externalIPAddress=%@&localIPAddress=%@", 
         BASE_URL, 
         coordinate.latitude, 
         coordinate.longitude, 
         uniqueIdentifier, 
         (long)self.productId, 
         [self getIPAddress], 
         [self getLocalIPAddress] 
         ]; 



NSURL *url=[NSURL URLWithString:requestUrl]; 
NSURLRequest *request= [NSURLRequest requestWithURL:url]; 
NSURLConnection *c=[[NSURLConnection alloc] initWithRequest:request delegate:self]; 

NSLog(@"Array: %@", self.news); 



} 
//========================= 
-(void)connection: (NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{ 

self.jsonData= [[NSMutableData alloc] init]; 

} 
-(void)connection: (NSURLConnection *)connection didReceiveData:(NSData *)theData{ 


[self.jsonData appendData:theData]; 
} 

-(void)connectionDidFinishLoading:(NSURLConnection *)connection{ 


self.news=[NSJSONSerialization JSONObjectWithData:self.jsonData options:nil error:nil]; 



} 

-(void)connection: (NSURLConnection *)connection didFailWithError:(NSError *)error{ 

UIAlertView *errorView=[[UIAlertView alloc] initWithTitle:@"Error" message:@"download could not be compelete" delegate:nil cancelButtonTitle:@"Dissmiss" otherButtonTitles:nil, nil]; 
[errorView show]; 

} 

2.I總是有警告「不兼容的指針到整數轉換髮送‘*無效’到類型的參數‘NSJSONreading ...’」的這行代碼「self.news = [NSJSONSerialization JSONObjectWithData:自.jsonData選項:nil error:nil];'

self.news是一個數組,我將它改爲字典,但我得到了相同的警告消息。

回答

1

它不起作用,因爲當您在self.news上調用NSLog時,解析器甚至沒有開始解析任何數據。任何ivar的默認值是nil,這就是爲什麼你什麼都得不到。

關於這一警告,這是由於NSJSONSerialization返回一個不透明的指針,即id,到可可OBJ,所以你要投出來的news類型,以防止編譯器抱怨。

例如,假設你的self.news是一個NSDictionary

self.news = (NSDictionary *)[NSJSONSerialization JSONObjectWithData:self.jsonData options:nil error:nil]; 

編輯

在你的情況,考慮你的JSON響應數據的結構,你應該使用一個NSArray爲根對象,以便

self.news = (NSArray *)[NSJSONSerialization JSONObjectWithData:self.jsonData options:nil error:nil]; 
+0

感謝有關NSLog的信息。 我想嘗試self.news作爲字典,但我如何訪問我的數據我曾經使用 'self.topText.text = [[self.news objectAtIndex:0] objectForKey:@「pname」];' 如何在成爲字典時將其寫入? (對不起,我是初學者) – user2211254

+0

我的信息是一個數組,每個元素都有這樣的產品信息: 2013-07-04 18:58:29.301測試[18986:11303] Array:( { cid = 2 ; 圖像= 「HTTP://xxx/images/loginlogo.png」; 手冊= 「」; 電影= 「http://jplayer.org/video/m4v/Big_Buck_Bunny_Trailer.m4v」; 的pcode = 023942435228; PID = 1; PNAME = 「例如產品」; 價格= 12; QR碼= 「」; 銷售= 0; 「sale_percent」= 0; 文本=「在這裏你可以找到關於該產品的一些額外的信息.... 「; } ) – user2211254

+0

在這種情況下,你的根對象是一個數組,所以你應該使用'NSArray'。通常,這就是爲什麼NSJSONSerialization返回一個不透明類型的原因,因爲JSON根對象取決於從請求中獲取的JSON數據的格式。 – HepaKKes