2014-03-18 77 views
0

如果TableView第一次啓動,他應該通過JSON檢索數據。不幸的是,這是行不通的。只有當我使用刷新,數據加載。有人能幫我找到問題嗎?謝謝您的幫助。NSURLConnection sendAsynchronousRequest

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 

UINib *nib = [UINib nibWithNibName:@"ErgebnissCell" bundle: nil]; 
[self.tableView registerNib:nib forCellReuseIdentifier:@"eCell"]; 


UIRefreshControl *theControl = self.refreshControl; 

if([theControl actionsForTarget:self forControlEvent:UIControlEventValueChanged] == nil) { 
    [theControl addTarget:self action:@selector(refresh:) forControlEvents:UIControlEventValueChanged]; 
} 
self.refreshControl.attributedTitle = [[NSAttributedString alloc] initWithString:@"Aktuallisiere"]; 

switch ([self checkInternetConnection]) { 
    case NotReachable: 
     NSLog(@"Keine Internetverbindung Vorhanden"); 
     break; 
    case ReachableViaWiFi: 
     NSLog(@"WI-FI Verbindung Vorhanden"); 
     break; 
    case ReachableViaWWAN: 
     NSLog(@"WWAN Verbindung vorhanden"); 
     break; 

    default: 
     break; 

     } 

[self updateItems]; 

} 

-(void)stopRefresh 
{ 
[self.refreshControl endRefreshing]; 
} 



- (void)didReceiveMemoryWarning 
{ 
[super didReceiveMemoryWarning]; 

} 

-(NetworkStatus)checkInternetConnection 
{ 
self.reachability = [Reachability reachabilityForInternetConnection]; 
return [self.reachability currentReachabilityStatus]; 
} 

-(NetworkStatus)checkInternetConnectionWithHostName:(NSString*)hostName 
{ 
self.reachability = [Reachability reachabilityWithHostName:(NSString *)hostName]; 
return [self.reachability currentReachabilityStatus]; 
} 

- (void)viewWillAppear:(BOOL)inAnimated { 
[super viewWillAppear:inAnimated]; 
[self updateItems]; 
} 


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)inInterfaceOrientation { 
return YES; 
} 

-(IBAction)refresh:(id)sender 
{ 
[self updateItems]; 
} 


- (void)updateItems { 

NSString *ergbnisseURL = @"http://iosentwicklung.de/Ergebnisse_2014.json"; 
NSURLRequest *theRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:ergbnisseURL]]; 
[NSURLConnection sendAsynchronousRequest: theRequest queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *allCoursesData, NSError *error) { 
    if (allCoursesData == nil) { 
     NSLog(@"error = %@", error); 
    } 
    else { 
     NSError *error; 
     self.alleErgebnisse = [NSJSONSerialization 
           JSONObjectWithData:allCoursesData 
           options:NSJSONReadingMutableContainers|NSJSONReadingMutableLeaves 
           error:&error]; 

     self.heim1 = self.alleErgebnisse[@"Heim1"]; 
     self.gast1 = self.alleErgebnisse[@"Gast1"]; 
     self.ergebniss1 = self.alleErgebnisse[@"Ergebniss1"]; 
     self.heim2 = self.alleErgebnisse[@"Heim2"]; 
     self.gast2 = self.alleErgebnisse[@"Gast2"]; 
     self.ergebniss2 = self.alleErgebnisse[@"Ergebniss2"]; 
     self.heim3 = self.alleErgebnisse[@"Heim3"]; 
     self.gast3 = self.alleErgebnisse[@"Gast3"]; 
     self.ergebniss3 = self.alleErgebnisse[@"Ergebniss3"]; 
     self.heim4 = self.alleErgebnisse[@"Heim4"]; 
     self.gast4 = self.alleErgebnisse[@"Gast4"]; 
     self.ergebniss4 = self.alleErgebnisse[@"Ergebniss4"]; 
     self.heim5 = self.alleErgebnisse[@"Heim5"]; 
     self.gast5 = self.alleErgebnisse[@"Gast5"]; 
     self.ergebniss5 = self.alleErgebnisse[@"Ergebniss5"]; 
     self.heim6 = self.alleErgebnisse[@"Heim6"]; 
     self.gast6 = self.alleErgebnisse[@"Gast6"]; 
     self.ergebniss6 = self.alleErgebnisse[@"Ergebniss6"]; 
     self.heim7 = self.alleErgebnisse[@"Heim7"]; 
     self.gast7 = self.alleErgebnisse[@"Gast7"]; 
     self.ergebniss7 = self.alleErgebnisse[@"Ergebniss7"]; 
     self.heim8 = self.alleErgebnisse[@"Heim8"]; 
     self.gast8 = self.alleErgebnisse[@"Gast8"]; 
     self.ergebniss8 = self.alleErgebnisse[@"Ergebniss8"]; 
     self.heim9 = self.alleErgebnisse[@"Heim9"]; 
     self.gast9 = self.alleErgebnisse[@"Gast9"]; 
     self.ergebniss9 = self.alleErgebnisse[@"Ergebniss9"]; 
     self.heim10 = self.alleErgebnisse[@"Heim10"]; 
     self.gast10 = self.alleErgebnisse[@"Gast10"]; 
     self.ergebniss10 = self.alleErgebnisse[@"Ergebniss10"]; 
     self.heim11 = self.alleErgebnisse[@"Heim11"]; 
     self.gast11 = self.alleErgebnisse[@"Gast11"]; 
     self.ergebniss11 = self.alleErgebnisse[@"Ergebniss11"]; 
     self.heim12 = self.alleErgebnisse[@"Heim12"]; 
     self.gast12 = self.alleErgebnisse[@"Gast12"]; 
     self.ergebniss12 = self.alleErgebnisse[@"Ergebniss12"]; 
     self.heim13 = self.alleErgebnisse[@"Heim13"]; 
     self.gast13 = self.alleErgebnisse[@"Gast13"]; 
     self.ergebniss13 = self.alleErgebnisse[@"Ergebniss13"]; 
     self.heim14 = self.alleErgebnisse[@"Heim14"]; 
     self.gast14 = self.alleErgebnisse[@"Gast14"]; 
     self.ergebniss14 = self.alleErgebnisse[@"Ergebniss14"]; 
     self.heim15 = self.alleErgebnisse[@"Heim15"]; 
     self.gast15 = self.alleErgebnisse[@"Gast15"]; 
     self.ergebniss15 = self.alleErgebnisse[@"Ergebniss15"]; 
     self.heim16 = self.alleErgebnisse[@"Heim16"]; 
     self.gast16 = self.alleErgebnisse[@"Gast16"]; 
     self.ergebniss16 = self.alleErgebnisse[@"Ergebniss16"]; 
     self.heim17 = self.alleErgebnisse[@"Heim17"]; 
     self.gast17 = self.alleErgebnisse[@"Gast17"]; 
     self.ergebniss17 = self.alleErgebnisse[@"Ergebniss17"]; 
     self.heim18 = self.alleErgebnisse[@"Heim18"]; 
     self.gast18 = self.alleErgebnisse[@"Gast18"]; 
     self.ergebniss18 = self.alleErgebnisse[@"Ergebniss18"]; 
     self.heim19 = self.alleErgebnisse[@"Heim19"]; 
     self.gast19 = self.alleErgebnisse[@"Gast19"]; 
     self.ergebniss19 = self.alleErgebnisse[@"Ergebniss19"]; 
     self.heim20 = self.alleErgebnisse[@"Heim20"]; 
     self.gast20 = self.alleErgebnisse[@"Gast20"]; 
     self.ergebniss20 = self.alleErgebnisse[@"Ergebniss20"]; 
     self.heim21 = self.alleErgebnisse[@"Heim21"]; 
     self.gast21 = self.alleErgebnisse[@"Gast21"]; 
     self.ergebniss21 = self.alleErgebnisse[@"Ergebniss21"]; 
     self.heim22 = self.alleErgebnisse[@"Heim22"]; 
     self.gast22 = self.alleErgebnisse[@"Gast22"]; 
     self.ergebniss22 = self.alleErgebnisse[@"Ergebniss22"]; 
     self.heim23 = self.alleErgebnisse[@"Heim23"]; 
     self.gast23 = self.alleErgebnisse[@"Gast23"]; 
     self.ergebniss23 = self.alleErgebnisse[@"Ergebniss23"]; 
     self.heim24 = self.alleErgebnisse[@"Heim24"]; 
     self.gast24 = self.alleErgebnisse[@"Gast24"]; 
     self.ergebniss24 = self.alleErgebnisse[@"Ergebniss24"]; 
     self.heim25 = self.alleErgebnisse[@"Heim25"]; 
     self.gast25 = self.alleErgebnisse[@"Gast25"]; 
     self.ergebniss25 = self.alleErgebnisse[@"Ergebniss25"]; 

    } 
}]; 
[self.tableView reloadData]; 
[self.refreshControl setTintColor:[UIColor colorWithRed:0.000 green:0.000 blue:0.630 alpha:1.000]]; 
//[self setRefreshControl: self.refreshControl]; 
[self performSelector:@selector(stopRefresh) withObject:nil afterDelay:3]; 
//[self.refreshControl endRefreshing]; 


} 

回答

0

顧名思義sendAsynchronousRequest是異步的。這意味着該函數返回並保持執行下一行代碼,即使函數本身沒有完成其工作。這也意味着,該行

[self.tableView reloadData]; 

沒有任何影響,因爲它很可能,當你已經執行了reloadData方法請求仍在工作,因此沒有任何數據重新加載,因爲請求仍然得到信息。

此外,它第二次工作,但實際上它不工作。你第二次看到的是前一次請求的數據。

一種可能的解決方案是將reloadData行放在completionHandler塊的正上方。

+0

謝謝你的幫助。現在它可以工作。 – carlie

+0

不客氣。如果您接受帶複選標記的答案,我將不勝感激。 – Merlevede

+0

你能把「Ergebniss1」改成「Ergebnis1」嗎?可能有人在閱讀這些試圖學習德語的人,並開始學習不正確的拼寫。 – gnasher729

0

您不是從異步完成塊的表上調用reloadData。您在進行異步調用後立即調用它。試試這個:

// weak reference self: 
__weak typeof(self)weakSelf = self; 

[NSURLConnection sendAsynchronousRequest: theRequest queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *allCoursesData, NSError *error) { 

    __strong typeof(weakSelf)strongSelf = weakSelf; 

    if (allCoursesData == nil) { 
     NSLog(@"error = %@", error); 
    } 
    else { 
     NSError *error; 
     self.alleErgebnisse = [NSJSONSerialization 
          JSONObjectWithData:allCoursesData 
          options:NSJSONReadingMutableContainers|NSJSONReadingMutableLeaves 
          error:&error]; 

     // do stuff 

     // RELOAD TABLE HERE: 
     [self.tableView reloadData]; 
    } 
}]; 
相關問題