我想創建一個應用程序,它將從HTTP請求中檢索JSON數據,並將其作爲JSON對象發送給應用程序主控制器,然後再從中進行進一步處理。iPhone JSON對象
我堅持的地方實際上是創建一個類,它將用作一個JSON類,在該類中將獲取URL,獲取數據並返回該對象。
獨自一人,即使能夠使這個類的工作,但我不能讓類來存儲我的主控制器的對象來檢索它。
因爲IM相當新的Objective-C的本身,我的想法是,即時通訊搞亂了我的init調用內:
-initWithURL:(NSString *) value
{
responseData = [[NSMutableData data] retain];
NSURL *theURL = [NSURL URLWithString:value];
NSURLRequest *request = [NSURLRequest requestWithURL:theURL];
[[NSURLConnection alloc] initWithRequest:request delegate:self];
return self;
}
JSON對象的處理髮生在這裏:
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
[connection release];
NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
[responseData release];
NSError *jsonError;
SBJSON *json = [[SBJSON new] autorelease];
NSDictionary *parsedJSON = [json objectWithString:responseString error:&jsonError];
// NSArray object.
listings = [parsedJSON objectForKey:@"posts"];
NSEnumerator *enumerator = [listings objectEnumerator];
NSDictionary* item;
// to prove that it does work.
while (item = (NSDictionary*)[enumerator nextObject]) {
NSLog(@"posts:id = %@", [item objectForKey:@"id"]);
NSLog(@"posts:address = %@", [item objectForKey:@"address"]);
NSLog(@"posts:lat = %@", [item objectForKey:@"lat"]);
NSLog(@"posts:lng = %@", [item objectForKey:@"lng"]);
}
[responseString release];
}
現在當調用主控制器內的對象時,我在viewDidLoad方法調用中使用了這一點代碼:
- (void)viewDidLoad {
[super viewDidLoad];
JSON_model *jsonObj = [[JSON_model alloc] initWithURL:@"http://localhost/json/faith_json.php?user=1&format=json"];
NSEnumerator *enumerator = [[jsonObj listings] objectEnumerator];
NSDictionary* item;
//
while (item = (NSDictionary*)[enumerator nextObject]) {
NSLog(@"posts:id = %@", [item objectForKey:@"id"]);
NSLog(@"posts:address = %@", [item objectForKey:@"address"]);
NSLog(@"posts:lat = %@", [item objectForKey:@"lat"]);
NSLog(@"posts:lng = %@", [item objectForKey:@"lng"]);
}
}