Я обновляю приложение, которое я выпустил в магазине приложений. Можно ли удалить все ранее сохраненные объекты, которые пользователь имеет при первом запуске? [Дубликат]

В то время как обещания и обратные вызовы хорошо работают во многих ситуациях, боль в задней части выражает нечто вроде:

if (!name) {
  name = async1();
}
async2(name);

. В итоге вы пройдете через async1; проверьте, не определено ли name или нет, и соответственно вызовите обратный вызов.

async1(name, callback) {
  if (name)
    callback(name)
  else {
    doSomething(callback)
  }
}

async1(name, async2)

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

Fibers помогает в решении проблемы.

var Fiber = require('fibers')

function async1(container) {
  var current = Fiber.current
  var result
  doSomething(function(name) {
    result = name
    fiber.run()
  })
  Fiber.yield()
  return result
}

Fiber(function() {
  var name
  if (!name) {
    name = async1()
  }
  async2(name)
  // Make any number of async calls from here
}

Вы можете проверить проект здесь .

1
задан Vinestro 15 January 2013 в 10:30
поделиться

2 ответа

Включена ли миграция постоянных хранилищ? Если вы только делаете тривиальные модификации модели, автоматическая миграция будет означать, что вам не нужно перезагружать данные.

 NSError *error = nil;
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
                                               configuration:nil
                                                         URL:storeURL
                                                     options:@{
                                                        NSMigratePersistentStoresAutomaticallyOption:@YES,
                                                        NSInferMappingModelAutomaticallyOption:@YES,
                                                        NSSQLiteAnalyzeOption:@YES,
                                                            }
                                                       error:&error])

Если есть другая причина для очистки вашей модели, тогда NSUserDefaults путь. Вы можете использовать #define, чтобы установить номер версии, и иметь постоянный сброс хранилища, когда числа отличаются друг от друга, а затем, когда вы знаете, что сделали изменение, которое требует пустого хранилища, вы можете увеличить #define:

#define kNukeTheCache 1000

...

    NSNumber *nukeNumber = [[NSUserDefaults standardUserDefaults] objectForKey:nukemeKey];

    if ((nukeNumber == nil) || (nukeNumber.integerValue < kNukeTheCache)) {
            [self deletePersistentStore:storeURL];
    }
    [[NSUserDefaults standardUserDefaults] setInteger:kNukeTheCache forKey:nukemeKey];
    [[NSUserDefaults standardUserDefaults] removeObjectForKey:totalNuke];
    [[NSUserDefaults standardUserDefaults] synchronize];


- (void)deletePersistentStore:(NSURL *)storeURL
{
    NSError *error = nil;
    [[NSFileManager defaultManager] removeItemAtURL:storeURL error:&error];
    if (error) { // Handle error }
}
2
ответ дан ikuramedia 28 August 2018 в 19:27
поделиться

Используйте NSUserDefaults, чтобы установить приложение независимо от того, обновлено или нет. Если обновлено, то очистите основные данные из приложения. Поместите эту ссылку, чтобы сбросить основные данные: link

, когда ваш обновление выполнено:

[[NSUserDefaults standardUserDefaults]setBool:TRUE forKey:@"isUpdated"]

, затем проверьте значение того же самого при запуске приложения.

0
ответ дан Community 28 August 2018 в 19:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: