2015-10-06 72 views
9

我想從AppDelegate中被管理對象上下文,但應用程序崩潰我把兩行代碼到方法後,即使我什麼也不做,並且有在調試方面的消息:「CoreData:無法加載NSManagedObjectModel零是非法URL參數......。」「無法加載NSManagedObjectModel。零是非法URL參數」

在我的方法添加的代碼:

AppDelegate *delegate = [UIApplication sharedApplication].delegate; 
NSManagedObjectContext *managedObjectContext = delegate.managedObjectContext; 

-managedObjectModel方法在AppDelegate中:

- (NSManagedObjectModel *)managedObjectModel { 
// The managed object model for the application. It is a fatal error for the application not to be able to find and load its model. 
if (_managedObjectModel != nil) { 
    return _managedObjectModel; 
} 
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"FoodPin" withExtension:@"momd"]; 
_managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL]; 
return _managedObjectModel; 
} 

和-managedObjectContext方法:

- (NSManagedObjectContext *)managedObjectContext { 
// Returns the managed object context for the application (which is already bound to the persistent store coordinator for the application.) 
if (_managedObjectContext != nil) { 
    return _managedObjectContext; 
} 

NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator]; 
if (!coordinator) { 
    return nil; 
} 
_managedObjectContext = [[NSManagedObjectContext alloc]initWithConcurrencyType:NSPrivateQueueConcurrencyType]; 
[_managedObjectContext setPersistentStoreCoordinator:coordinator]; 
return _managedObjectContext; 
} 

「FoodPin」是我的項目名稱。那麼什麼是錯在這裏我是新iPhone編程(尤其是核心數據)?

任何人都可以幫助我嗎?

謝謝...

+0

問題是這樣'[[一個NSBundle mainBundle] URLForResource:@ 「FoodPin」 withExtension:@ 「momd」];'被返回nil成'modelURL'。你的項目中是否有名爲FoodPin的Core Data模型? –

+0

哦..感謝很多,我忘了改變我的.xcdatamodeld文件的名稱! – ZyusAn

回答

23

的問題是這一行:

NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"FoodPin" withExtension:@"momd"]; 

modelURLnil這意味着系統無法找到資源FoodPin.momd

請確保您有在您的項目名爲FoodPin核心數據模型。它將在項目導航器中顯示爲FoodPin.xcdatamodeld

+2

注意:即使文件以擴展名「xcdatamodeld」出現,該方法仍應該尋找擴展名「momd」(因爲它在此答案中的代碼中)。 – FeifanZ

+3

即使我在我的項目中具有相同名稱的文件,我也會得到相同的錯誤。 –

0

NSURL * modelURL = [[一個NSBundle mainBundle] URLForResource:@ 「XYZ」 withExtension:@ 「momd」];

確保你的數據模型的名稱匹配URLForResource:XYZ。

3

我有同樣的問題,但對我來說,modelURL設置正確。問題是我的* .xcdatamodeld文件不在複製包資源中。我不知道它爲什麼會消失,但再次添加它可以解決問題。

這裏是如何解決它: 你的項目>構建階段>複製包ressources>「+」按鈕,選擇你xcdatamodeld文件

+0

這解決了我的問題。我不知道發生了什麼。看看我的提交歷史,*。 xcdatamodeld從未進入複製包資源構建階段。我正在使用Xcode 8 beta 6. –

+0

我刪除了*。Copy Bundle Resources構建階段的xcdatamodeld,問題仍然解決。可能是Xcode的緩存問題,這意味着執行Clean或Clean Build文件夾可能會爲其他人解決此問題。 –

-1

我有同樣的錯誤。

NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"name" withExtension:@"momd"]; 

名字中的「n」必須是「N」:與obj中的其他所有內容一樣,此母親區分大小寫。