2013-07-11 2 views
0

Я только что построил свое первое приложение, и осталось только одно. Я получаю данные с URL-адреса. Если этот 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 - это среда, которую вы используете для разработки приложений, и это вопрос, связанный с чисто кодом. – dandan78

+1

@ dandan78 Ты мой герой! –

+1

@ h2 lol! На самом деле, именно ты меня начал с этого. Каждый должен внести свой вклад, чтобы сайт был чистым. – 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

Итак, все, что вы сделали, это удаление вызова для «синхронизации»? –

+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

надеюсь, что я помог u .. – dhaya

+0

Вы были большой помощью спасибо. но ваш код выше дает мне предупреждение '_bridge casts не имеет никакого эффекта, когда не используется 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); 

           }); 

          }]; 
Смежные вопросы