2013-07-11 115 views
0

我剛剛構建了我的第一個應用程序,剩下的事情還剩一件事。我從網址獲取數據。如果該URL失敗或無,那麼我想從用戶默認值中獲取數據。用戶默認不保存

我有保存來自數據的用戶默認關閉URL

- (void)saveToUserDefaults 
{ 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    [defaults setObject:data forKey:@"data"]; 
    [defaults synchronize]; 
} 

,這裏是一些我的代碼的功能。

NSURL *url = [NSURL URLWithString:@"http://jamessuske.com/isthedomeopen/isthedomeopenGetData.php"]; 
     data = [NSData dataWithContentsOfURL:url options:0 error:nil]; 
     [self saveToUserDefaults]; 
     if(url == nil){ 
      NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
      data = [defaults dataForKey:@"data"]; 
     } 
     NSArray *array = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; 

我從互聯網上斷開,並跑到我的應用程序在模擬器和我的應用程序返回空值。

我能做些什麼來解決這個問題?

+1

這個問題與Xcode無關。 Xcode是用於開發應用程序的IDE,這是一個純粹的與代碼相關的問題。 – dandan78

+1

@ dandan78你是我的英雄! – 2013-07-11 05:33:35

+1

@ h2大聲笑!其實,是你讓我開始的。每個人都必須盡全力保持場地清潔。 – dandan78

回答

0

試試這個

- (void)saveToUserDefaults 
{ 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    [defaults setObject:data forKey:@"data"]; 

} 

NSURL *url = [NSURL URLWithString:@"http://jamessuske.com/isthedomeopen/isthedomeopenGetData.php"]; 
     data = [NSData dataWithContentsOfURL:url options:0 error:nil]; 
     [self saveToUserDefaults]; 
     if(url == nil){ 
      NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
      data = [defaults objectForKey:@"data"]; 
     } 
     NSArray *array = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; 
+2

所以你所做的只是去掉「同步」的呼叫? – 2013-07-11 05:34:02

+0

啊,沒有工作:( – user1269625

+0

http://stackoverflow.com/questions/9647931/nsuserdefaults-synchronize-method – dhaya

2

試試這個爲您的方案

//用於檢查網絡方法是否可用

- (BOOL)isNetworkAvailable 
    { 
    BOOL connected; 
const char *host = "www.apple.com"; 
SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(NULL, host); 
SCNetworkReachabilityFlags flags; 
connected = SCNetworkReachabilityGetFlags(reachability, &flags); 
isConnected = NO; 
isConnected = connected && (flags & kSCNetworkFlagsReachable) && !(flags & kSCNetworkFlagsConnectionRequired); 
CFRelease(reachability); 
    return isConnected; 
} 

}

now try to check 

     NSURL *url = [NSURL URLWithString:@"http://jamessuske.com/isthedomeopen/isthedomeopenGetData.php"]; 
       data = [NSData dataWithContentsOfURL:url options:0 error:nil]; 

     bool networkStatus = [self isNetworkAvailable]; 
       if(networkStatus){ 
        [self saveToUserDefaults]; 
       } 
    else 
    { 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
        data = [defaults objectForKey:@"data"]; 
    } 
       NSArray *array = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; 
+0

希望我幫你.. – dhaya

+0

你一直是一個很大的幫助,謝謝。但你上面的代碼給了我一個警告'_bridge強制轉換在沒有使用ARC時沒有效果' – user1269625

+0

而且在xcode中,當我嘗試運行我的腳本時它說構建失敗。 – user1269625

0

試試這個一。

NSURL * url = [NSURL URLWithString:@"http://jamessuske.com/isthedomeopen/isthedomeopenGetData.php"]; 

NSURLRequest * request = [NSURLRequest requestWithURL:url]; 

NSOperationQueue * newQueue = [[NSOperationQueue alloc] init]; 

[NSURLConnection sendAsynchronousRequest:request 
            queue:newQueue 
         completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) { 

           dispatch_async(dispatch_get_main_queue(), ^{ 

            NSArray * array = nil; 

            NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

            if (error == nil) { 

             array = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; 

             [defaults setObject:array forKey:@"data"]; 

            } else { 

             array = [defaults objectForKey:@"data"]; 

            } 

            NSLog(@"%@", array); 

           }); 

          }]; 
相關問題