2013-11-26 102 views
0

此代碼應該保存在TestViewController.m文件我的數據到核心數據:SIGABRT時,管理對象上下文中的核心數據

//Property 
@property (nonatomic, retain) NSManagedObjectContext *managedObjectContext; 


//Methods 
- (void)saveUser:(NSString *) username withEmail:(NSString *) email withName:(NSString *) name 
{ 
    //1 
    AppDelegate* appDelegate = [UIApplication sharedApplication].delegate; 
    //2 
    self.managedObjectContext = appDelegate.managedObjectContext; 

    User *coreDataUser = [NSEntityDescription insertNewObjectForEntityForName:@"User" inManagedObjectContext:self.managedObjectContext]; 

    coreDataUser.username = username; 
    coreDataUser.email = email; 
    coreDataUser.name = name; 

    NSError *error; 

    if (![self.managedObjectContext save:&error]) 
    { 
     NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]); 
    } 
} 

//In my save user method I have stuff that is done in another thread but then this is called: 

// Add in any UIKit code here on main queue 
    dispatch_async(dispatch_get_main_queue(), ^{ 

     if (isUnique == YES) 
     { 
      [self saveUser:[emailStr lowercaseString] withEmail:emailStr withName:nameStr]; 

我的代碼老是死機於:

ser *coreDataUser = [NSEntityDescription insertNewObjectForEntityForName:@"User" inManagedObjectContext:self.managedObjectContext]; 

它說主信號SIGABRT。

我下面這個教程:http://www.codigator.com/tutorials/ios-core-data-tutorial-with-example/

而且在IOS 7

我缺少什麼跑?

我現在跟蹤appDelegate.m代碼,但它看起來是這樣的:

// 1 
- (NSManagedObjectContext *) managedObjectContext { 
    if (_managedObjectContext != nil) { 
     return _managedObjectContext; 
    } 
    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator]; 
    if (coordinator != nil) { 
    _ managedObjectContext = [[NSManagedObjectContext alloc] init]; 
     [_managedObjectContext setPersistentStoreCoordinator: coordinator]; 
    } 

    return _managedObjectContext; 
} 

//2 
- (NSManagedObjectModel *)managedObjectModel { 
    if (_managedObjectModel != nil) { 
     return _managedObjectModel; 
    } 
    _managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil]; 

    return _managedObjectModel; 
} 

//3 
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator 
{ 
    if (_persistentStoreCoordinator != nil) 
    { 
     return _persistentStoreCoordinator; 
    } 

    NSString *test = [self applicationDocumentsDirectory]; 
    NSString *test2 = test; 

    NSURL *storeUrl = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"HappyPeople.sqlite"]]; 

    NSError *error = nil; 

    _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]]; 

i f (![_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]; 
} 

好像sqllite數據庫文件被創建。

我得到的例外情況是這樣的:

NSException * name:@"NSInternalInconsistencyException" reason:@"+entityForName: could not locate an entity named 'Users' in this model." 0x0895ee20 
+1

'appDelegate.managedObjectContext' nil? – John

+0

良好的起點,我會測試 – cdub

+0

嗯,必須與創造的上下文的東西。我遵循的是URL,然後他們開始爲零,但他們應該像鏈接 – cdub

回答

0

我知道這個問題是有點老了...

這是例外,我是說我改變了對象模型的架構和嘗試使用舊模式的文件。磁盤上的sqllite db可能與您的應用程序架構不匹配。

我一直在使用CoreData有UIManagedDocument所以這是一個有點不同。您可以選擇在打開時自動遷移。

而且,早在評論有人問ManagedObjectContext是否爲零。我相信在你給插件打電話之前應該檢查一下。我們確定所有核心數據設置都在主隊列中嗎?它可能需要一點時間打開。 (再次用UIManagedDocument在另一個線程上明確)

相關問題