2013-05-08 77 views
-2

我有一個Web服務來獲取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 2013-05-08 20:58:00

+0

我該如何檢查。 ? – Zac24 2013-05-08 20:58:49

+0

您第一次加載json,並將其存儲在具有特定名稱的本地文件中(如果我理解的很好)。下次啓動應用程序時,如果具有該名稱的文件存在,則不需要加載json,只需使用該文件即可。但出於好奇,你不希望每次啓動應用程序時都要更新這些數據嗎? – talnicolas 2013-05-08 21:01:05

回答

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。這些都確保每次發射都會發生一次,一次。 – 2013-05-08 21:14:28

+0

哎呀抱歉誤讀---將編輯 – 2013-05-08 21:16:28

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"]; 
    } 
相關問題