2013-05-08 3 views
-2

У меня есть веб-сервис для извлечения данных в форме JSON. Я вызываю эту службу каждый раз, когда приложение запускается (внутри метода appDidFinishLaunching) и сохраняет его в локальном файле. Я хочу вызвать службу только в первый раз, когда приложение запускается, и со следующего раза я просто хотел использовать файл, в котором я сохранил данные JSON.как получить доступ к любому методу только один раз при запуске приложения в первый раз

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 

    //live json data url 

    NSURL *url = [NSURL URLWithString:@"My Url"]; 
    NSData *urlData = [NSData dataWithContentsOfURL:url]; 

    //attempt to download live data 
    if (urlData) 
    { 
     NSString *filePath = [NSString stringWithFormat:@"%@/%@", documentsDirectory,@"data.json"]; 
     [urlData writeToFile:filePath atomically:YES]; 

    } 
    //copy data from initial package into the applications Documents folder 
    else 
    { 
     //file to write to 
     NSString *filePath = [NSString stringWithFormat:@"%@/%@", documentsDirectory,@"data.json"]; 

     //file to copy from 
     NSString *json = [ [NSBundle mainBundle] pathForResource:@"data" ofType:@"json" inDirectory:@"html/data" ]; 
     NSData *jsonData = [NSData dataWithContentsOfFile:json options:kNilOptions error:nil]; 

     //write file to device 
     [jsonData writeToFile:filePath atomically:YES]; 
    } 

    NSError *jsonError = nil; 

    NSString *jsonFilePath = [NSString stringWithFormat:@"%@/%@", documentsDirectory,@"data.json"]; 
    NSData *jsonData = [NSData dataWithContentsOfFile:jsonFilePath options:kNilOptions error:&jsonError ]; 
    NSMutableArray *jsonArray = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&jsonError]; 
    self.serverResponseArray = jsonArray; 
    NSLog(@"%@",self.serverResponseArray); 

К этому коду я пишу JSON ответ на локальный файл и хранения в массиве, чтобы использовать его во всем приложении.

+1

Вы могли бы просто проверить наличие файла перед попыткой загрузить данные нет? – talnicolas

+0

Как это проверить. ? – Zac24

+0

Первый раз, когда вы загрузите json и сохраните его в локальном файле с определенным именем (если я хорошо понимаю). При следующем запуске приложения, если файл с таким именем существует, вам не нужно загружать json, просто используйте этот файл. Но просто из любопытства разве вы не хотите, чтобы данные обновлялись каждый раз при запуске приложения? – talnicolas

ответ

2
static NSString * const someKey = @"haveChecked"; 
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{ 

    NSUserDefaults * stdUserDefaults = [NSUserDefaults standardUserDefaults]; 
    if(![[stdUserDefaults objectForKey:someKey] boolValue]) 
    { 
     [self trySomething]; 
    } 
} 
-(void)gotJson 
{ 
    //async callback 
    NSUserDefaults * stdUserDefaults = [NSUserDefaults standardUserDefaults]; 
    [stdUserDefaults setBool:YES forKey:someKey]; 
    [stdUserDefaults synchronize]; 

} 

это звучит, как вам нужно, чтобы узнать о работе с файлами, так вот некоторые переполнение стека чтения:

What is the documents directory (NSDocumentDirectory)?
Write a file on iOS

+1

Я не думаю, что это решит исходный вопрос, который должен был загрузить JSON только при первом запуске. Все это гарантирует, что что-то происходит на каждом запуске, один раз. –

+0

oops sorry misread --- будет редактировать –

0

попробовать это

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
    { 

      if ([self fetchFromNSUserDefaults:@"FirstTimeNO"]==nil || [FunctionManager fetchFromNSUserDefaults:@"FirstTimeNO"][email protected]"") { 
       [self YourFunctionThatCallFirstTime]; 
      } 
     return YES; 
    } 

    -(id)fetchFromNSUserDefaults:(NSString *)strKey{ 
      NSUserDefaults *objUserDefaults = [NSUserDefaults standardUserDefaults]; 
       return [objUserDefaults objectForKey:strKey]; 
    } 

    -(void)addToNSUserDefaults:(id)objValue forKey:(NSString *)strKey{ 
     NSUserDefaults *objUserDefaults = [NSUserDefaults standardUserDefaults]; 
     [objUserDefaults setObject:objValue forKey:strKey]; 
     [objUserDefaults synchronize]; 
    } 

    -(void)YourFunctionThatCallFirstTime { 
       //Your Stuff 

      [self addToNSUserDefaults:@"1" forKey:@"FirstTimeNO"]; 
    } 
Смежные вопросы