2015-04-28 22 views
1

我想添加數據到CoreData。 這是我的code.But我得到這個錯誤。我應該在這種情況下做什麼?'+ entityForName:nil不是合法的NSManagedObjectContext參數搜索實體名稱

這是我ViewController.h

@interface LoginViewController : UIViewController { 
    NSManagedObjectContext *managedObjectContext; 

} 

@property (nonatomic, retain) NSManagedObjectContext *managedObjectContext; 
@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator; 

,這是我的.m文件

 Person *person = [[Person alloc] initWithJSONString:string]; 
    NSManagedObjectContext *context = [self managedObjectContext]; 
    NSManagedObjectContext *object = [NSEntityDescription insertNewObjectForEntityForName:@"Users" inManagedObjectContext:context]; 
    [object setValue:person.name forKey:@"name"]; 
    [object setValue:person.id forKey:@"userId"]; 
    [object setValue:person.statu forKey:@"statu"]; 
    [object setValue:person.token forKey:@"token"]; 
    [object setValue:person.sonuc forKey:@"sonuc"]; 

- (NSManagedObjectContext *)managedObjectContext 
{ 
    if (managedObjectContext != nil) return managedObjectContext; 

    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator]; 
    if (coordinator != nil) { 

     managedObjectContext = [[NSManagedObjectContext alloc] init]; 
     [managedObjectContext setPersistentStoreCoordinator:coordinator]; 
    } 
    return managedObjectContext; 
} 

這是錯誤。

'+entityForName: nil is not a legal NSManagedObjectContext parameter searching for entity name 'Users'' 

感謝您的幫助

+0

您的實體名稱可能是'User'(單數),而不是'Users'。 – Rog

+0

選中此:http://stackoverflow.com/questions/11596487/entityforname-nil-is-not-a-legal-nsmanagedobjectcontext-parameter-core-data?rq=1 –

+0

沒有改變任何東西。我得到同樣的錯誤。 –

回答

0

這是更好地使用

NSManagedObjectContext *object = [NSEntityDescription insertNewObjectForEntityForName:NSStringFromClass([YourClass class]) inManagedObjectContext:context]; 

你並不需要使用硬編碼字符串,因爲它可能有輸入錯誤。

在你的情況下,它必須是

NSManagedObjectContext *object = [NSEntityDescription insertNewObjectForEntityForName:NSStringFromClass([Users class]) inManagedObjectContext:context]; 
+0

感謝您的回答,但它的意思是 現在使用未聲明的標識符'用戶'現在 –

+0

你的班級的名字是什麼? –

+0

實體(類型)和類之間的關係是多對多的。可以有很多實體使用同一個類,實際上這是默認的! –

1

你的問題的心臟是,你有沒有想過在那裏persistentStoreCoordinator來源,並且永遠不會創建該對象。

您的支票,if (coordinator != nil),正在隱藏此問題。相反,你應該瞄準設置的東西,所以coordinator從來沒有nil。然後檢查可以被刪除,或者甚至更好,替換爲這樣的斷言:NSAssert(coordinator != nil, @"There is no persistent store coordinator.")

如果持久存儲協調器來自此視圖控制器之外,我建議將它作爲視圖控制器初始化的一部分傳遞。如果視圖控制器可以自己設置持久存儲協調器,則可以將其作爲其初始化的一部分或者延遲加載。

相關問題