2013-06-30 54 views
2

我的應用使用CoreData,其型號名爲:mupo-ios.xcdatamodel。該模型是原始Model: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; 
} 

無法找到媽媽的文件,因此managedObjectModel無法初始化。任何人都可以幫助我嗎?

回答

0

我解決了這個問題這樣(我不完全理解爲什麼它的工作雖然):

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

在這一行:

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

變化momdmom

+0

我試過了,但它不起作用... – louftansa

+0

這個模型在你創建的靜態庫中嗎?或者它在一個項目中是包容性的?在目標 - >構建階段 - >複製束資源:您是否在那裏看到您的模型? – yeesterbunny

+0

這在我的項目中是包容性的。我可以在目標 - >構建階段 - >複製束資源中看到它。 – louftansa

9

這問題發生在一個複雜的場景中。我在一個工作區中有兩個xcodeproj。

我試圖在第二個項目中使用相同的xcdatamodeld文件,將其從第一個項目拖到第二個項目xcode中。這創建了一個正確的引用,但即使在將文件添加到「編譯資源」時,modm文件也未創建。

解決的辦法是將拖放到xcdatamodeld到Finder的第二個項目直接而不是從xcode中的第一個項目。

+0

從工作區中刪除您的xcdatamodeld文件,然後從查找器中拖放 –

+0

這是真的!即使在2016年,Xcode 8,這個bug仍然存在。 –

+0

哇,這個很難找到 – marosoaie