Как определить / контролировать, где хранится файл управляемой объектной модели (.mom)? - PullRequest
1 голос
/ 26 марта 2011

Эй, ребята, у меня есть этот предварительный загрузчик (проект утилиты командной строки Xcode), который предварительно загружает хранилище sqlite моего iPhone-приложения, и до сих пор оно работало нормально, так как всегда выдает ошибку несовместимого магазина. Поэтому вместо ссылки на файл .mom в предзагрузчике я собираюсь создать его внутри предзагрузчика, чтобы, надеюсь, обойти эту проблему. Вот тут и возникает мой вопрос, как мне определить, где preloader хранит файл .mom, который я ему создаю? И есть ли какой-нибудь способ, которым я могу сказать это, где поместить это?

Ниже приведены некоторые соответствующие фрагменты кода.

Из приложения для iPhone: / ** Возвращает модель управляемого объекта для приложения. Если модель еще не существует, она создается путем объединения всех моделей, найденных в комплекте приложений. * / - (NSManagedObjectModel *) managedObjectModel {

    if (managedObjectModel != nil) {
        return managedObjectModel;
    }
    //managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];

    NSURL *modelURL = [NSURL fileURLWithPath:@"path/to/Parking.mom"];
    managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];

#pragma mark TODO change below line to search for your project's mom file
    NSString *path = [[NSBundle mainBundle] pathForResource:@"Parking" ofType:@"mom"];
    return managedObjectModel;
}

Из предварительного загрузчика (служебный проект командной строки Xcode):

NSManagedObjectModel *managedObjectModel(NSString* momPath) {

    static NSManagedObjectModel *model = nil;

    if (model != nil) {
        return model;
    }
    model = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];

    //NSURL *modelURL = [NSURL fileURLWithPath:momPath];
    //model = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];

    return model;
}

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

Заранее спасибо!

1 Ответ

1 голос
/ 26 марта 2011

Используйте -initWithContentsOfURL: для чтения файла модели управляемых объектов откуда угодно.На самом деле, выполнение всего этого может решить вашу ошибку ... может случиться так, что у вас есть старый файл модели в вашем комплекте, и вы используете + mergedModelFromBundles: добавляете его в другие файлы модели.

...