在 NSManagedObject 上调用 MR_createEntity 时出错

Posted

技术标签:

【中文标题】在 NSManagedObject 上调用 MR_createEntity 时出错【英文标题】:Error when calling MR_createEntity on a NSManagedObject 【发布时间】:2014-04-22 14:31:08 【问题描述】:

当我简单地调用 MR_createEntity 时,我得到一个 exc_bad_access 错误。由于我是magicRecord 的新手,所以我找不到错误的来源。

代码:

TMTAppDelegate.m

//TMTAppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions


    [MagicalRecord setupAutoMigratingCoreDataStack];



    NSArray *trajetsRawArray = @[@@"km" : @125, @"mn":@110, @"adressStart" : @"Metz", @"adressEnd" : @"Gérardmer", ,
                                 @@"km" : @4, @"mn":@14, @"adressStart" : @"Plappeville", @"adressEnd" : @"Metz",
                                 @@"km" : @312, @"mn":@200, @"adressStart" : @"Metz", @"adressEnd" : @"Paris",
                                 @@"km" : @413, @"mn":@236, @"adressStart" : @"Marseille", @"adressEnd" : @"Toulouse",
                                 @@"km" : @2, @"mn":@4, @"adressStart" : @"Ban-St-Martin", @"adressEnd" : @"Metz",
                                 @@"km" : @65, @"mn":@63, @"adressStart" : @"Metz", @"adressEnd" : @"Gérardmer"
                                 ];

    //[[UINavigationBar appearance] setBackIndicatorImage:[UIImage imageNamed:@"backButton"]];
    self.trajetsManager = [[TMTTrajetsManager alloc]initWithArray:trajetsRawArray];
    NSLog(@"hello");
    return YES;

TMTTrajetsManager.m

//  TMTTrajetsManager.m
-(id)initWithArray:(NSArray *)array 

    self = [super init];
    if (self)
        for (NSDictionary *trajetDico in array)

            Trajet *trajet = [Trajet MR_createEntity];
            trajet.distance = [trajetDico objectForKey:@"km"];
            trajet.duration = [trajetDico objectForKey:@"mn"];
            trajet.start_point = [trajetDico objectForKey:@"adressStart"];
            trajet.end_point = [trajetDico objectForKey:@"adressEnd"];
            self.autoManager = [[TMTTrajetAutoManager alloc] initWithDelegate:self];
        
    

    return self;

错误:

【问题讨论】:

您看到的是堆栈溢出,因为+entityName 再次以某种方式调用+MR_entityName。你在你的Trajet 类中实现了+entityName 吗?如果是的话,你能显示代码吗? 不,我没有实现它。 Trajet 类是从我的核心数据模型自动生成的类 您使用的是哪个版本的 MagicalRecord?这可能是一个错误,请确保您使用的是最新版本,例如 MagicalRecord v2.3.0。请注意:您正在创建 TMTTrajetAutoManager array.count - times... 我更改了 TMTTrajetAutoManager。这是一个错误。我没有找到神奇的记录版本号,但我正在使用开发分支中的库并且我是最新的 【参考方案1】:

禁用 MR_SHORTHAND,并明确使用带有 MR_ 前缀的方法名称。看起来 this 方法正在通过速记支持识别此方法存在。速记支持现已弃用,将是 MagicalRecord 的 removed in the next version。

【讨论】:

您可以通过删除 .pch 文件中的 #define MR_SHORTHAND 行来禁用速记。

以上是关于在 NSManagedObject 上调用 MR_createEntity 时出错的主要内容,如果未能解决你的问题,请参考以下文章

CoreData:错误:无法在 NSManagedObject 类上调用指定的初始化程序

CoreData:错误:无法在 NSManagedObject 类“Collect”上调用指定的初始化程序

Swift CoreData:无法在 NSManagedObject 上调用指定的初始化程序

Segue 错误 - 未能在 nsmanagedobject 类上调用指定的初始化程序

segueing时出现核心数据错误:无法在NSManagedObject类上调用指定的初始值设定项

segueing 时的核心数据错误:无法在 NSManagedObject 类上调用指定的初始化程序