Основные данные: постоянное хранилище работает в XCode, но не на устройстве - PullRequest
1 голос
/ 25 февраля 2011

Я использую базовые данные в своих приложениях для iPhone. Он отлично работает, когда я использую его в симуляторе, но при развертывании его на устройстве значение моего основного хранилища данных не найдено для моего приложения. Если я вставляю значение в iPhone, оно находит значение в Базовых данных.

Мне нужно сохранить значение Core Data при его развертывании на iPhone.

Пожалуйста, помогите мне, если кто-нибудь знает, как это сделать.

Ответы [ 2 ]

2 голосов
/ 25 февраля 2011

Все файлы, включая приложения, установленные на устройстве, должны быть в неизменяемом комплекте приложений, что делает файлы доступными только для чтения.

Если вы включите файл постоянного хранилища Core Data в приложение, он будет находиться в комплекте приложения и может быть добавлен только в координатор постоянного хранилища в качестве хранилища только для чтения. Любая попытка записи в него приведет к ошибке.

Обычно вам требуется хранилище для чтения и записи, поэтому решение состоит в том, чтобы использовать стандартные файловые операции для копирования включенного файла постоянного хранилища из комплекта приложения, а затем в папку «Документы» или «Библиотека» приложения. Когда приложение запускается, делегат приложения проверяет наличие хранилища перед инициализацией стека основных данных и копирует его, если это еще не сделано.

У вас также есть более продвинутая опция использования двух хранилищ для одного стека, одно только для чтения, а другое - для чтения. Однако этот метод вносит сложность в модель данных и обычно не требуется.

1 голос
/ 25 февраля 2011

Это довольно просто ...

  • подготовьте файл базы данных CoreData
  • назовите его, например InitialData.sqlite
  • добавьте его в комплект приложений

... и добавьте что-то подобное этому непосредственно перед выделением и инициализацией NSPersistentStoreCreation.

NSString *storePath = ... your store path for persistent store coordinator ...;

NSFileManager *fileManager = [NSFileManager defaultManager];
if (![fileManager fileExistsAtPath:storePath]) {
  NSString *initialStorePath = [[NSBundle mainBundle] pathForResource:@"InitialData" ofType:@"sqlite"];
  if (defaultStorePath) {
    [fileManager copyItemAtPath:initialStorePath toPath:storePath error:NULL];
  }
}

Я предполагаю, что вы хотите скопировать некоторые данные по умолчанию в ваше приложение.Это все, что я могу вывести из вашего вопроса - совершенно непонятно, чего вы действительно хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...