调用 NSManagedObject 方法会引发 EXC BAD ACCESS

Posted

技术标签:

【中文标题】调用 NSManagedObject 方法会引发 EXC BAD ACCESS【英文标题】:Calling a NSManagedObject method throws EXC BAD ACCESS 【发布时间】:2015-06-18 14:42:53 【问题描述】:

我正在使用我的应用程序中的核心数据。我正在使用以下函数在核心数据数据库表中删除和插入数据。它第一次运行良好。当我第二次打电话时,它会抛出 EXC BAD ACCESS。 任何人都可以帮助解决这个问题。

@implementation abc

@synthesize delegate;

Dynamic *dbObjDynamic;



-(void) callingcoredata:(NSInteger) family type:(NSInteger) type List:(NSString *) list

if ([AppManager getAppMode] == Online)

        statdyn = type;

         arrDyanmic= [[NSMutableArray alloc]init];
         dbObjDynamic = [[Dynamic alloc]init];

        [dbObjDynamic DeleteRecordControlsFromTable:listtype];


在 Dynamic.m 中

-(void)DeleteRecordControlsFromTable:(NSString *)listtype

NSManagedObjectContext *deleteContext = [self ManagedObjectContext];

NSFetchRequest *fetch = [[NSFetchRequest alloc] init];
[fetch setEntity:[NSEntityDescription entityForName:@"Dynamic" inManagedObjectContext:deleteContext]];

NSPredicate *predicate=[NSPredicate predicateWithFormat:@"listType == %@", listtype];
[fetch setPredicate:predicate];

NSError * error = nil;

NSArray * lookupdata = [deleteContext executeFetchRequest:fetch error:&error];
for(NSManagedObject *info in lookupdata)

    [deleteContext deleteObject:info];
    [deleteContext save:&error];



它在dbObjDynamic = [[Dynamic alloc]init]; 处抛出错误

提前致谢。

【问题讨论】:

能贴出动态初始化方法的代码吗? @SergiiMartynenkoJr - 它只是初始化对象。没有来源。是否必须添加代码进行初始化? 如果您确信那里没有任何事情发生,您可以避免在此处发布。但是,我看不出有什么原因,为什么它在那个代码点上失败了。 您是否尝试将Dynamic *dbObjDynamic 移动到您初始化它的位置?您可以尝试另一件事,添加检查 if (dbObjDynamic == nil) dbObjDynamic = [[Dynamic alloc]init]; 这样您就不会每次都初始化它 好的..谢谢你的回复..我会试试的.. 【参考方案1】:

你应该分配/初始化到Dynamic managedObject类的get实例,而不是使用这个-

Dynamic *dbObjDynamic = [self.fetchedResultsController objectAtIndexPath:specificIndex];

并调用这些方法从 managedObjectContext 中获取 Dynamic 类 managedObject 的 fetchedResults

- (NSFetchedResultsController *)fetchedResultsController 
    if (_fetchedResultsController != nil) 
        return _fetchedResultsController;
    

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc]init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Dynamic" inManagedObjectContext:self.managedObjectContext];

    [fetchRequest setEntity:entity];

    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc]
                                        initWithKey:@"anyAttributeOfDynamic"
                                        ascending:YES];

    NSArray *sortDescriptors = [NSArray arrayWithObjects:sortDescriptor, nil];
    [fetchRequest setSortDescriptors:sortDescriptors];

    _fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:nil];
    _fetchedResultsController.delegate = self;

    NSError *error = nil;
    if (![self.fetchedResultsController performFetch:&error]) 
        NSLog(@"Core data error %@, %@", error, [error userInfo]);
        abort();
    

    return _fetchedResultsController;

【讨论】:

以上是关于调用 NSManagedObject 方法会引发 EXC BAD ACCESS的主要内容,如果未能解决你的问题,请参考以下文章

调用 NSManagedObject 函数会中断,但在访问变量时不会中断

为啥调用 webapi 方法会引发错误,即路径无效?

目标 c - 核心数据:无法调用 NSManagedObject 子类的私有方法

NSManagedObject 的 KVO 方法调用外部二进制数据属性导致表格视图滚动迟缓,为啥?

使用反射调用实例方法会引发 TargetException。

调用本机模块会引发“无法识别的 objc 方法”错误