'+ entityForName:nil不是搜索实体名称的合法NSManagedObjectContext参数

时间:2015-04-28 06:21:49

标签: ios objective-c json core-data

我正在尝试向CoreData添加数据。 这是我的代码。但是我收到了这个错误。在这种情况下我该怎么办?

那是我的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''

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

问题的核心在于您没有考虑var counter=0; $( "#kick_button" ).click(function() { counter++; $("#header_bell_notificator").removeClass("show_notif").html(counter); }); 来自哪里,而且永远不会创建此对象。

您的支票persistentStoreCoordinator正在隐藏此问题。相反,您应该设置目标,以便if (coordinator != nil)永远不会coordinator。然后可以删除检查,或者甚至更好地替换为这样的断言:nil

如果持久性存储协调器来自此视图控制器外部,我建议将其作为视图控制器初始化的一部分传递。如果视图控制器可以自己设置持久性存储协调器,则可以将其作为初始化的一部分进行,也可以将其加载。

答案 1 :(得分:0)

最好使用

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

您不需要使用硬编码字符串,因为它可能会输入错误。

在你的情况下,它必须是

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