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"); } 

4 Solutions collect form web for “iOS: вызов метода всего один раз”

Установите флаг как ключ NSUserDefaults и проверьте это значение NSUserDefault в методе downloadCovers. Если он уже установлен, ничего не делать, иначе загрузите файлы и установите флаг в true.

Вот так:

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

ура

почему бы просто не проверить, существует ли файл или нет в локальном хранилище!

 //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]; } } 

Вы не можете сделать это для метода, но вы можете сделать это для функции, использующей pthread_once :

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

или вы можете выполнить блок один раз с помощью dispatch_once (самый естественный выбор для вашей текущей реализации).

В некоторых случаях (а не в этом) вы также можете делать свою работу в +initialize .

РЕДАКТИРОВАТЬ: Вопрос уточнен

Просто проверьте наличие файла или используйте предпочтение, если вы хотите, чтобы это сохранялось в нескольких запусках.

  - (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"); } } 
  • Xcode 4 и ветви
  • Тестирование SMS в симуляторе iOS
  • iOS SDK. Как получить идентификаторы segue viewController?
  • UITextView начинается в нижней или средней части текста
  • Xcode / iOS: как определить, работает ли код в сборке DEBUG / RELEASE?
  • libXcodeDebuggerSupport.dylib отсутствует в SDK для разработки iOS 4.2.1
  • Тип создателя Bundle Тип кода ??? в Xcode 4
  • XCode 4.2 Переименование цели
  • Попытка загрузить представление контроллера просмотра во время его освобождения ... UIAlertController
  • Контроллер вида Xcode 6 показывает пустой экран с автозапуском
  • Swift 3 и Xcode8 - Неоднозначное использование init
  • Interesting Posts

    Изменение контрастности, яркости, насыщенности или цвета UIImage

    Как написать Unit Test для функции запроса Alamofire?

    как кнопка со счетчиком в виде таблицы

    NSAttributedStringKey дает ошибку неразрешенного идентификатора

    UITableView add cell Animation

    Как преобразовать NSArray в целочисленные значения

    Настроить URL для совместного использования iOS

    UIWebView Локальное воспроизведение видео / аудио в iOS не работает, используя Meteor (PhoneGap)

    Как мне оживить внешний вид гистограммы в Core Plot?

    Как получить доступ к файлу, входящему в комплект приложений в Swift?

    UITapGestureRecognizer initWithTarget: действие: метод для принятия аргументов?

    Нажатие нескольких UIViewControllers в NavigationController

    Какова взаимосвязь между bounds.size и frame.size при анимации UICollectionViewCell

    Сортировать по нескольким свойствам с помощью Realm

    Цель C: Добавление действия на массив кнопок

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.