2013-06-30 5 views
2

Мое приложение использует CoreData с моделью: mupo-ios.xcdatamodel. Эта модель является второй версией оригинальной модели Model.xcdatamodeld. Я был с помощью managedObjectContext через документ:Не удалось найти файл «.momd»

 NSURL *url = [[[NSFileManager defaultManager] URLsForDirectory:NSLibraryDirectory inDomains:NSUserDomainMask] lastObject]; 
     url = [url URLByAppendingPathComponent:@"MyDocument"]; 

     self.document = [[UIManagedDocument alloc] initWithFileURL:url]; 

     // Set our document up for automatic migrations 
     NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys: 
           [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, 
           [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];    
     self.document.persistentStoreOptions = options; 
    } 

И потом, я достигаю managedObjectContext:

self.managedObjectContext = self.document.managedObjectContext; 

Теперь я хочу, чтобы получить доступ к главному контексту непосредственно, вот код:

- (NSManagedObjectContext *)mainContext { 
    if (!_mainContext) { 
     _mainContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType]; 
     _mainContext.persistentStoreCoordinator = self.persistentStoreCoordinator; 
    } 
    return _mainContext; 
} 

Проблема заключается в том, когда я пытаюсь указать managedObjectModel:

- (NSManagedObjectModel *)managedObjectModel { 
    if (!_managedObjectModel) { 
NSString *localModelPath = [[NSBundle mainBundle] pathForResource:@"mupo-ios" ofType:@"momd"]; 
     NSURL *modelUrl = [NSURL fileURLWithPath:localModelPath];  
     _managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelUrl]; 
    } 
    return _managedObjectModel; 
} 

Файл momd не может быть найден, поэтому managedObjectModel не может быть инициализирован. Может ли кто-нибудь мне помочь?

ответ

0

Я решил проблему таким образом (я не совсем понимаю, почему это хотя работает):

- (NSManagedObjectModel *)managedObjectModel { 
    if (!_managedObjectModel) { 
    _managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil]; 
    } 
    return _managedObjectModel; 
} 
1

В этой строке:

NSString *localModelPath = [[NSBundle mainBundle] pathForResource:@"mupo-ios" ofType:@"momd"]; 

Изменение momd в mom

+0

Я пробовал это, но он не работает ... – louftansa

+0

Является ли эта модель в статической библиотеке, которую вы создали? Или это все включено в одном проекте? В target-> build phase-> copy bundle resources: Вы видите свою модель там? – yeesterbunny

+0

В моем проекте все включено. Я вижу это в целевых статьях -> фазах сборки -> ресурсах копии. – louftansa

9

Этот проблема возникла со мной в сложном сценарии. У меня было два xcodeproj в одном рабочем пространстве.

Я попытался использовать тот же файл xcdatamodeld во втором проекте , перетащив его из первого проекта во второй внутри xcode. Это правильно создало ссылку, но даже при добавлении файла в «компилируемый ресурс» файл модма не был создан.

Решение было отправлено . Перетащить xcdatamodeld во второй проект из Finder напрямую, а не из первого proj в xcode.

+0

Удалите файл xcdatamodeld из рабочего пространства, прежде чем перетаскивать его с помощью finder –

+0

Это правда! Даже в 2016 году, Xcode 8, эта ошибка все еще существует. –

+0

ничего себе, этого было трудно найти – marosoaie

Смежные вопросы