2012-04-01 80 views
0

嗨我想知道如何在應用程序生命中只調用一次方法...我的應用程序應該從服務器下載一些文件,而且我只需要執行一次;我的意思是說只是一個每安裝一次iOS:只調用一次方法

這裏是我的方法

//Download some images from server and save it into directory 

- (void) downloadCovers { 

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    [self saveFile:@"mag1" ofType:@"png" fromURL:@"http://myweb.com/mag1.png" inDirectory:documentsDirectory]; 

} 

這種方法集圖像作爲的UIButton BG:

- (void)buttonsBGImage { 

     UIImage * bgMag1 = [self loadImage:@"mag1" ofType:@"png" inDirectory:[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]]; 

     [mag1 setBackgroundImage:bgMag1 forState:UIControlStateNormal]; 
     NSLog(@"BG IS SET"); 

    } 
+0

你的意思是一次_per installation_?或每次運行的應用程序? – 2012-04-01 21:04:14

+0

我對這個問題感到困惑。如果你只想調用一次方法,那就調用它一次! [self methodName]; – 2012-04-01 21:04:29

+0

'#ifndef something //這是代碼; #endif' – 0xDE4E15B 2012-04-01 21:06:35

回答

3

將一個標誌設置爲NSUserDefaults鍵,並在downloadCovers方法中檢查此NSUserDefault值。如果已設置,則不執行任何操作,否則下載文件並將標誌設置爲true。

像這樣:

-(void) downloadCovers { 
BOOL downloaded = [[NSUserDefaults standardUserDefaults] boolForKey: @"downloaded"]; 
if (!downloaded) { 
    //download code here 
     [[NSUserDefaults standardUserDefaults] setBool:YES forKey: @"downloaded"]; 
    } 
} 

乾杯

0
- (void)buttonsBGImage { 

     if (!mag1.backgroundImage){ 
      UIImage * bgMag1 = [self loadImage:@"mag1" ofType:@"png" inDirectory:[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]]; 

       [mag1 setBackgroundImage:bgMag1 forState:UIControlStateNormal]; 
       NSLog(@"BG IS SET"); 
     } 

    } 
4

你不能爲它做方法,但您可以使用pthread_once

static pthread_once_t once = PTHREAD_ONCE_INIT; 
pthread_once(& once, SomeFunction); 

或者您可以使用dispatch_once(當前實現的最自然的選擇)執行一次塊。

在某些情況下(不是這一個),您可能還傾向於在+initialize中完成您的工作。

編輯:問題是澄清

只是檢查文件的存在,或者,如果你想這個在多個發射堅持使用偏好。

6

爲什麼不只是測試文件是否存在或不在本地存儲!

//Download some images from server and save it into directory 

- (void) downloadCovers { 

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *pathToImg = [NSString stringWithFormat:@"%@/mag1.png",documentsDirectory]; 
    BOOL isExist = [[NSFileManager defaultManager]fileExistsAtPath:pathToImg]; 
    if (!isExist) { 
     [self saveFile:@"mag1" ofType:@"png" fromURL:@"http://myweb.com/mag1.png" inDirectory:documentsDirectory]; 
    } 

} 
+0

This。您不希望基於用戶默認或其他機制。如果文件存在,請使用它。如果沒有,請[重新]下載。請注意,在某些時候,幾乎可以保證您需要一個「刷新」功能,並且保持這種簡單的功能將使這一點變得更加簡單。 – bbum 2012-04-01 21:46:27