应用程序因核心数据的一个属性而崩溃

Posted

技术标签:

【中文标题】应用程序因核心数据的一个属性而崩溃【英文标题】:App crashes with one attribute of core data 【发布时间】:2013-11-07 15:55:45 【问题描述】:

我有一个很奇怪的问题。我正在使用 coredata 来保存笔记。我可以访问/保存/编辑“Notes”实体的所有属性,除了一个:类别。

-(void)editCategory 

    NSFetchRequest *request = [[NSFetchRequest alloc]init];
    NSEntityDescription *categRequest = [NSEntityDescription entityForName:@"Notes" inManagedObjectContext:_managedObjectContext];
    request.predicate = [NSPredicate predicateWithFormat:@"text = %@", noteToEdit];
    [request setEntity:categRequest];

    //Error handling
    NSError *error = nil;
    NSMutableArray *mutableFetchResults = [[_managedObjectContext executeFetchRequest:request error:&error]mutableCopy];
    if (mutableFetchResults == nil) 
        NSLog(@"Error happened : %@", error);
    

    Notes *editMe = [mutableFetchResults objectAtIndex:0];
    [editMe setCategory:editCategoryText];
    NSLog(@"Category from pickerview : %@", editCategoryText);
    if (![_managedObjectContext save:&error]) 
        NSLog(@"couldnt save : %@", error);
    

这一行:

[editMe setCategory:editCategoryText];

正在崩溃。 editCategoryText 是一个字符串,作为类别属性。奇怪的是,我使用完全相同的代码来更改标题属性,而且我没有任何问题。

日志文件:

2013-11-07 15:49:20.286 简单注释 1[16511:a0b]-[__NSCFString managedObjectContext]:无法识别的选择器发送到实例 0x8dccc30 2013-11-07 15:49:20.293 简单注释 1[16511:a0b] *** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[__NSCFString managedObjectContext]:无法识别的选择器发送到实例 0x8dccc30”

您知道为什么此属性的行为与其他属性不同吗?谢谢。

【问题讨论】:

尝试使用 NSArray 而不是 mutableArray。 【参考方案1】:

不在电脑上,所以无法测试,但是:

摆脱mutableCopyexecuteFetchRequest 返回自动释放的对象,然后您尝试将其复制,这变成了一个垃圾指针,它恰好指向一个字符串。

【讨论】:

【参考方案2】:

实际上它似乎是一个核心数据错误,我通过在模拟器中删除我的应用程序,在 xcode 中删除核心数据模型,重新构建并执行清理来解决它。

【讨论】:

以上是关于应用程序因核心数据的一个属性而崩溃的主要内容,如果未能解决你的问题,请参考以下文章

使用 python 线程时,python 因核心转储而崩溃

iOS 10 应用程序因试图访问隐私敏感数据而崩溃

Android 应用程序不断因空指针异常而崩溃

SwiftUI 因“前提条件失败:属性未能设置初始值:85”而崩溃

mysql 因“mysqld 收到信号 11”而崩溃

核心数据:访问 NSManagedObject 属性时应用程序崩溃