2015-10-06 22 views
9

Chcę uzyskać kontekst obiektu zarządzanego z AppDelegate, ale aplikacja uległa awarii po umieszczeniu dwóch linii kodu w metodzie, nawet ja nie zrobiłem nic innego, i było komunikat w obszarze debugowania: "CoreData: nie można załadować NSManagedObjectModel nil jest nielegalne parametr URL ..."."Nie można załadować NSManagedObjectModel. Nil jest niedozwolonym parametrem adresu URL"

kod dodaną w mojej metody:

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

metoda -managedObjectModel w 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; 
} 

i -managedObjectContext metoda:

- (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" to moja nazwa projektu .Tak co się dzieje tutaj jestem nowy w programowaniu iPhone (Core danych w szczególności)?.

Czy ktoś może mi pomóc?

Dzięki ...

+0

Problem polega na tym, że '[[NSBundle mainBundle] URLForResource: @" FoodPin "withExtension: @" momd "];' zwraca zero do 'modelURL'. Czy posiadasz w swoim projekcie model Core Data o nazwie FoodPin? –

+0

Och ... dziękuję, zapomniałem zmienić moje imię pliku .xcdatamodeld! – ZyusAn

Odpowiedz

23

Problemem jest to linia:

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

modelURL jest nil co oznacza, że ​​system nie może znaleźć zasobu FoodPin.momd.

Upewnij się, że dysponujesz modelem Core Data w swoim projekcie o nazwie FoodPin. Pojawi się jako FoodPin.xcdatamodeld w Nawigatorze projektu.

+2

UWAGA: Mimo że plik pojawia się z rozszerzeniem 'xcdatamodeld', metoda powinna nadal szukać rozszerzenia' momd' (jak to jest w kodzie w tej odpowiedzi). – FeifanZ

+3

Mimo że mam plik w moim projekcie o tej samej nazwie, pojawia się ten sam błąd. –

0

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

Upewnij się, że nazwa modelu danych jest zgodna z adresem URLForResource: XYZ.

3

Miałem ten sam problem, ale dla mnie modelURL został poprawnie ustawiony. Problem polegał na tym, że mój plik * .xcdatamodeld nie znajdował się już w zasobach kopiowania. Nie wiem, dlaczego zniknął, ale dodać go ponownie, aby rozwiązać problem.

Oto jak to naprawić: Ty Project> Budowa Fazy> Kopiuj Bundle Zasoby> "+" przycisk i wybrać xcdatamodeld złożyć

+0

To rozwiązało mój problem. Zastanawiam się co się stało. Patrząc na moją historię popełnienia, *. xcdatamodeld nigdy nie znajdował się w fazie kompilacji zasobów pakietu kopiowania. Używam Xcode 8 beta 6. –

+0

Usunąłem *.xcdatamodeld z fazy budowania pakietu Copy Bundle Resources, a problem pozostaje rozwiązany. Prawdopodobnie problem z pamięcią podręczną w Xcode, co oznacza, że ​​wykonanie czystego lub czystego folderu kompilacji może rozwiązać ten problem dla innych. –

-1

Miałem ten sam błąd.

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

"n" w nazwie musiało być "N": tak jak wszystko inne w tej grupie, w tej matce rozróżniana jest wielkość liter.

Powiązane problemy