2016-02-01 57 views
1

我一直都想與在urlnil下面的代碼:每次獲得零網址爲模型的核心數據的iOS

NSBundle *bundle = [NSBundle bundleForClass:[self class]]; 
NSURL *url = [bundle URLForResource:@"Model" withExtension:@"momd"]; 

bundlenil,我的型號名稱爲Model.xcdatamodeld

能有什麼是錯的?的

[NSBundle bundleForClass:[self class]]; 
+2

什麼是您的項目中的模型的名稱也檢查捆綁是不是n –

+0

Model.xcdatamodeld –

+0

捆綁不是零我驗證了它。 –

回答

0

使用

[[NSBundle bundleForClass:[self class]] resourceURL]; 

,而不是我清除了Model.xcdatamodeld刪除它,在我的代碼添加新DataModel.xcdatamodel並重新啓動模擬器,然後我得到了modelURL 。

+0

不工作,發出警告。 –

1
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"DataModel" withExtension:@"momd"]; 
NSManagedObjectModel *mom = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL]; 

+0

「model.xcdatamodeld」?我以爲你說它被稱爲「Model.xcdatamodeld」? – Pang

+0

是Model.xcdatamodeld –

1

我不認爲它是立即明確什麼bundleForClass返回給你。蘋果docs說:

  • (一個NSBundle *)bundleForClass:(類)ACLASS

返回值:

的一個NSBundle對象動態加載ACLASS(一個可加載束),在一個NSBundle如果aClass未動態加載或未在框架中定義,則爲定義aClass的框架的對象或主包對象。

它只在某些情況下給你mainBundle。你不說你的班級是什麼。我認爲直接去mainBundle(正如你所做的那樣)更安全。

+0

你能解釋得更清楚嗎? –

+0

在你原來的問題中,你使用了bundleForClass方法來獲得你需要的包 - 這是我假設的mainBundle。在你說的工作的答案中,你專門在mainBundle上調用了URLForResource。我認爲蘋果的文檔說,如果類不是動態加載的或者是框架的一部分,你只能從bundleForClass獲得mainBundle。我不知道你使用的是什麼類,但也許它是那些不會導致mainBundle被返回的類。 – Tim