我需要使用核心數據爲我的項目保留數據,到目前爲止我所做的工作編譯得很好,但是當我真正開始使用核心數據存儲內容時,程序就會退出,而我不知道原因。我爲appDelegate文件中的核心數據設置了所有必需的組件,並且我想將數據存儲在名爲DetailViewController
的viewController
中。這是我做了什麼:在現有項目中使用核心數據
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
// Set the tab bar controller as the window's root view controller and display.
self.window.rootViewController = self.tabBarController;
[self.window makeKeyAndVisible];
//this is what I added, reference managedObjectContext in the detail view controller.
detailViewController = [[DetailViewController alloc] init];
detailViewController.managedObjectContext = [self managedObjectContext];
return YES;
}
核心數據的所有組件已落實
- (NSManagedObjectContext *) managedObjectContext {
if (managedObjectContext != nil) {
return managedObjectContext;
}
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil) {
managedObjectContext = [[NSManagedObjectContext alloc] init];
[managedObjectContext setPersistentStoreCoordinator: coordinator];
}
return managedObjectContext;
}
- (NSManagedObjectModel *)managedObjectModel {
if (managedObjectModel != nil) {
return managedObjectModel;
}
managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];
return managedObjectModel;
}
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
if (persistentStoreCoordinator != nil) {
return persistentStoreCoordinator;
}
NSURL *storeUrl = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory]
stringByAppendingPathComponent: @"MyProjectName.sqlite"]];
NSError *error = nil;
persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc]
initWithManagedObjectModel:[self managedObjectModel]];
if(![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
configuration:nil URL:storeUrl options:nil error:&error]) {
/*Error for store creation should be handled in here*/
}
return persistentStoreCoordinator;
}
- (NSString *)applicationDocumentsDirectory {
return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
}
當我嘗試調用一個方法的詳細視圖來存儲數據,程序退出。
-(IBAction) addItem {
Info *info = [NSEntityDescription insertNewObjectForEntityForName:@"Info"
inManagedObjectContext:managedObjectContext];
info.name = item.name;
}
item
是在詳細視圖中當前對象,Info
是模型類文件。我在這裏想念什麼?
謝謝!
更新:
在控制檯中的錯誤信息是:
終止應用程序由於未捕獲的異常「NSInternalInconsistencyException」,原因是:「+ entityForName:未能找到NSManagedObjectModel爲實體名稱‘信息’」
但我在「Resources」文件夾中有一個Info.xcdatamodel文件,實體名稱是「Info」。
您的模型中是否有實體'@「Info?並且在調試控制檯中顯示什麼錯誤? – Nekto
是的,模型文件已經創建,實體名稱是「Info」。 'managedObjectContext!= nil'是否爲 – Michael
? – Nekto