iOS 5.1 openWithCompletionHandler не работает

Я пытаюсь сделать приложение iOS6.0 обратно совместимым с 5.1. Я выключил очевидные вещи (например, автопутешествия), но застрял на странной стадии.

Мое приложение берет данные из источника XML и помещает их в основную структуру дат. На iOS 6 это работает отлично. На iOS 5 застревает здесь

else if (self.dataStorage.documentState == UIDocumentStateClosed) {
   NSLog(@"THIS FIRES = db on disk but closed");
   [self.dataStorage openWithCompletionHandler:^(BOOL success) {
      NSLog(@"THIS NEVER FIRES");
    }];
}

Если я посмотрю на self.datastorage, то это то, что я ожидаю (закрытый управляемый документ) fileURL: file://localhost/ ..... /Library/Application%20Support/iPhone%20Simulator/5.1/Applications/E3E9192D-2DFE-4882-9041-00A1DF9E98D6/ Документы / По умолчанию%20Database documentState: [Закрыто]

Изменить: На самом деле отлично работает с iOS 5.0 или 6.0+. Моя проблема чисто с iOS 5.1, запущенной на симуляторе iPhone. Может ли это быть просто ошибкой симулятора? Он не откроет закрытый UIManagedDocument и не создаст несуществующий файл.

Вот полный код для полноты:

- (void)setDataStorage:(UIManagedDocument *)database
{
   if (_dataStorage != database) {
      _dataStorage = database;
      [self useDocument];
    }
}

-(UIManagedDocument*) initialiseDatabase {
  if (!self.dataStorage) {  
    NSURL *url = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
    url = [url URLByAppendingPathComponent:@"DefaultDatabase"];
    self.dataStorage = [[UIManagedDocument alloc] initWithFileURL:url]; // setter will create this for us on disk
  }
  return self.dataStorage;
}
- (void)useDocument {
  if (![[NSFileManager defaultManager] fileExistsAtPath:[self.dataStorage.fileURL path]]) {
    // does not exist on disk, so create it
    NSLog(@"db not on disk");
    [self.dataStorage saveToURL:self.dataStorage.fileURL forSaveOperation:UIDocumentSaveForCreating completionHandler:^(BOOL success) {
       NSLog(@"Doesn't fire");
      }];
} else if (self.dataStorage.documentState == UIDocumentStateClosed) {
    NSLog(@"db on disk but closed");
    // exists on disk, but we need to open it
    [self.dataStorage openWithCompletionHandler:^(BOOL success) {
        NSLog(@"Doesn't fire");
    }];
} else if (self.dataStorage.documentState == UIDocumentStateNormal) {
    NSLog(@"db on disk and open");
}
}

Спасибо

1 ответ

Решение

Теперь я определил проблему чуть более подробно: похоже, многие люди задавали этот вопрос раньше. К сожалению, никогда не было удовлетворительного решения. Тем не менее, это всего лишь проблема / ошибка в симуляторе, и она не должна быть проблемой для реальных устройств (как я подтвердил тестирование на iPad 5.1).

Другие вопросы по тегам