2014-10-12 41 views
-1

我想將某些UISwitch設置爲由HTTP GET請求拉入的值。請求正在工作。但是,由於我對iOS編程相當陌生,我不知道如何從擁有一些JSON數據到像PHP一樣拉開它。通過JSON數據設置UISwitches?

這是我目前有:

- (void)viewDidLoad 
{ 

    [super viewDidLoad]; 
    NSLog(@"viewdidload"); 
    self.responseData = [NSMutableData data]; 
    NSURLRequest *request = [NSURLRequest requestWithURL: 
         [NSURL  URLWithString:@"http://www.test.api/setings"]]; 

    NSMutableURLRequest *mutableRequest = [request mutableCopy]; 
    [mutableRequest addValue:_xAuthToken forHTTPHeaderField:@"X-Auth-Token"]; 

    request = [mutableRequest copy]; 

    [[NSURLConnection alloc] initWithRequest:request delegate:self]; 

    [switch1 setOn:1 animated:NO]; 
    [switch2 setOn:1 animated:NO]; 
    [switch3 setOn:1 animated:NO]; 
    [switch4 setOn:1 animated:NO]; 
    [switch5 setOn:1 animated:NO]; 
    [switch6 setOn:1 animated:NO]; 
    [switch7 setOn:0 animated:NO]; 
    [switch8 setOn:1 animated:NO]; 
} 

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { 
    NSLog(@"didReceiveResponse"); 
    [self.responseData setLength:0]; 
} 

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { 
    [self.responseData appendData:data]; 
} 

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { 
    NSLog(@"didFailWithError"); 
    NSLog([NSString stringWithFormat:@"Connection failed: %@", [error description]]); 
} 

- (void)connectionDidFinishLoading:(NSURLConnection *)connection { 
    NSLog(@"connectionDidFinishLoading"); 
    NSLog(@"Succeeded! Received %d bytes of data",[self.responseData length]); 

    // convert to JSON 
    NSError *myError = nil; 
    NSDictionary *res = [NSJSONSerialization JSONObjectWithData:self.responseData options:NSJSONReadingMutableLeaves error:&myError]; 

    // show all values 
    for(id key in res) { 

     id value = [res objectForKey:key]; 

     NSString *keyAsString = (NSString *)key; 
     NSString *valueAsString = (NSString *)value; 

     NSLog(@"key: %@", keyAsString); 
     NSLog(@"value: %@", valueAsString); 
    } 

    // extract specific value... 
    NSArray *results = [res objectForKey:@"results"]; 

    for (NSDictionary *result in results) { 
     NSString *icon = [result objectForKey:@"icon"]; 
     NSLog(@"icon: %@", icon); 
    } 

} 

- (void)viewDidUnload { 
    [super viewDidUnload]; 
} 

而這正是它的從服務器取回:

{"data": 
    {"setting1":"1", 
    "setting2":"1", 
    "setting3":"0", 
    "setting4":"0", 
    "setting5":"0", 
    "setting6":"0", 
    "setting7":"0", 
    "setting8":"0"} 
} 

回答

0

只是轉換的1倍或0的數字字符串爲bool值,然後設置使用它的開關狀態

//在你的類頭文件中聲明這個開關數組

property(strong,nonatomic)NSArray *switches; 

和viewDidLoad方法初始化

switches=[NSArray arrayWithObjects:switch1,switch2,switch3,switch4,switch5,switch6,switch7,switch8,nil]; 

//並在 - (空)connectionDidFinishLoading:(NSURLConnection的*)連接方法

NSError *myError = nil; 
    NSDictionary *res = [NSJSONSerialization JSONObjectWithData:self.responseData options:NSJSONReadingMutableLeaves error:&myError]; 

//獲取的設置和值的數組從你的數據中的對象

NSDictionary *switchValues=[res objectForKey:@"data"]; 
    // show all values 
NSUInteger *switchIndex=0; 

//迭代並將值轉換爲b OOL並使用該值

for(id key in switchValues) { 

     id value = [switchValues objectForKey:key]; 
     NSString *keyAsString = (NSString *)key; 
     NSString *valueAsString = (NSString *)value; 
     [[switches objectAtIndex:switchIndex] setOn:[valueAsString boolValue] animated:NO]; 
     NSLog(@"key: %@", keyAsString); 
     NSLog(@"value: %@", valueAsString); 
     switchIndex++; 

    } 
+0

我很抱歉,如果這聽起來愚蠢的設置開關的狀態,但我不知道如何實現你的代碼到我的... – user4114789 2014-10-12 10:25:59

+0

在你的循環時,烏爾用於獲取對象的鍵返回的對象是nStrings,就像鍵「setting1」你會得到「1」。要使用它來設置開關狀態,您可以將其轉換爲bool值,其中1將轉換爲true/Yes,並將0轉換爲false/No,並通過在該特定開關上調用函數setOn來設置開關的值,就像我上面所做的那樣 – 2014-10-12 10:28:07

+0

@ user4114789我編輯了答案以匹配您的代碼:) – 2014-10-12 10:36:24