2012-09-27 56 views
6

從設備刪除我的應用程序後收到'Cannot create an NSPersistentStoreCoordinator with a nil model'錯誤。我正在iPad設備上測試iPhone應用程序。我已經把這個代碼來檢查,如果我有文件AppDelegate.m從設備上刪除應用程序後無法創建NIL模型的NSPersistentStoreCoordinator

- (NSManagedObjectModel *)managedObjectModel { 
    if (__managedObjectModel != nil) { 
     return __managedObjectModel; 
    } 
    NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"Name" withExtension:@"momd"]; 
    if ([[NSFileManager defaultManager] fileExistsAtPath:[modelURL path]]) { 
     NSLog(@"%@", [modelURL path]); //This is printed because file exists 
    } 
    __managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL]; 
    return __managedObjectModel; 
} 

的問題是,[NSManagedObjectModel initWithContentsOfURL]將返回空值。 我已經做了下面的事情,但沒有成功:

  1. 變化managedObjectModel實例與此__managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];
  2. 清理build文件夾和清理項目
  3. 重啓動的Xcode
  4. 計算機重新啓動後
  5. 更改「momd 「to」mom「
  6. .xcdatamodeld is in Copy Bundle Resources and Compile Sources
  7. 改名.xcdatamodeld和清理和關閉的Xcode項目多次
  8. 關閉,在設備上
  9. 已刪除文件夾從:$ cd /Users/john/Library/Developer/Xcode/DerivedData
  10. 改變sqlite的名字從迪瓦恩
  11. 強制數據庫生成
  12. 刪除(再次)申請

我一直在尋找解決方案的小時,我仍然無法找到它。

+0

是否在模擬器上工作?你能夠在Xcode中打開'.xcdatamodeld'文件嗎? – FluffulousChimp

+0

Alan,我可以在Xcode中打開'.xcdatamodeld'文件,但該應用程序在模擬器中不工作。它啓動,但只顯示黑屏。 – amb

+0

我想我已經找到了一些東西......我剛剛意識到我並沒有刪除所有生活在'/ Users/john/Library/Developer/Xcode/DerivedData'中的文件,所以當我這樣做時,模擬器就OK了,即使是managedObjectModel。 有什麼方法可以刪除設備中的這些文件? – amb

回答

15

最後兩天後,試圖解決這個問題,我已經找到了解決辦法在這裏:

How to create the magic .xcdatamodeld folder/package?

我現在完成一個項目,其他開發商開始了,似乎他沒不會將最新更改推送到回購站,但這些更改都在設備中的應用程序中,當我刪除應用程序時,我刪除了正確的.xcdatamodeld文件。問題是我在項目中只有一個MyApp.xcdatamodel文件,這就是看起來有一個momd空文件夾的原因。

爲了創建數據模型的正確層次,該解決方案是很容易:

  1. 選擇MyApp.xcdatamodel
  2. 轉到編輯>添加模型版本...

而且這將MyApp.xcdatamodel文件嵌入到MyApp.xcdatamodeld中。現在momd文件夾有mom文件,應用程序運行正常。現在唯一的問題是,我有兩個MyApp.xcdatamodel,其中一個帶有綠色選擇的圖標,但兩者具有相同的內容,所以沒有問題。

1
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"select xcdatamodeld" withExtension:@"momd"]; 

選擇資源名稱完全相同的網址..

0

這是比較簡單的。

如果您有一個xcdatamodel文件沒有版本:在您的managedObjectModel聲明中使用擴展名「媽媽」。 如果你的xcdatamodel有版本,你應該使用「momd」。

2

我支持再次構建我的第一個iOS應用程序。今天,我得到了這個錯誤:'無法創建一個零模型的NSPersistentStoreCoordinator'。其實,這很容易解決。 請這行代碼:

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

[名稱]您填寫是一樣的模型文件(.xcdatamodeld)。 比如我有一個TipRecord.xcdatamodeld那麼這行應該是:

NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"TipRecord" withExtension:@"momd"]; 
相關問題