1

我正在使用核心数据来保存数据。我的应用程序第一次保存数据时没有任何问题,但第二次应用程序在[self.managedObjectContext save:nil];崩溃日志中在线崩溃

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFNumber localizedCaseInsensitiveCompare:]: unrecognized selector sent to instance 0x98dda90'
*** First throw call stack:
(0x1e6e012 0x179ee7e 0x1ef94bd 0x1e5dbbc 0x1e5d94e 0xeeae92 0xf645ee 0x15ca8f5 0x15c5785 0x15c8061 0xf53dc9 0x1ec80c5 0x1e22efa 0xe88482 0x14da5f3 0x1573e5f 0x14d5a26 0x14d916e 0x77ca 0x7d4e 0x17b2705 0x3dd920 0x619b24 0x17b2705 0x3dd920 0x3dd8b8 0x49e671 0x49ebcf 0x49dd38 0x40d33f 0x40d552 0x3eb3aa 0x3dccf8 0x1dc9df9 0x1dc9ad0 0x1de3bf5 0x1de3962 0x1e14bb6 0x1e13f44 0x1e13e1b 0x1dc87e3 0x1dc8668 0x3da65c 0x3efd 0x2425)
libc++abi.dylib: terminate called throwing an exception

我正在使用以下代码来保存数据

- (IBAction)save:(id)sender {
    Projects *projects = [NSEntityDescription insertNewObjectForEntityForName:@"Projects" inManagedObjectContext:self.managedObjectContext];
    NSLog(@"object id %@", projects.objectID);
    projects.title = projectTitleTxtFld.text;
    projects.descProject = descriptionTxtView.text;
    projects.type = projectType.text;
    projects.recID = [self generateRandom];
    NSLog(@"rec id %@", projects.recID);
    [self.managedObjectContext save:nil]; //here my app crashes
    NSLog(@"title %@", projects.title);
 }

-(NSNumber*)generateRandom
{
    int number = arc4random();
    if (number < 0) {
        number = number * -1;
    }
    NSNumber *newNumber = [NSNumber numberWithInt:number];
    return newNumber;
}
4

2 回答 2

0

你好我刚遇到这个问题。我将问题设置为在左滑动时 0% 兼容,在右滑动时设置为 100%。在核心数据中,我有一个属性 compliantPercentage 的 NSNumber 数据类型。

我使用 [NSNumber numberWithInt:100] 将一个简单的 int 数字包装到 NSNumber 中

我的视图是一个带有核心数据的表视图控制器,因此是获取的结果控制器。代码片段是:

CheckSectionQuestion *theQuestion;
theQuestion = [self.fetchedResultsController objectAtIndexPath:indexPath];
theQuestion.compliantPercentage=[NSNumber numberWithInt:100];
theQuestion.completed=[NSNumber numberWithBool:YES];

现在,虽然这更新了表格视图并且看起来它已经更新了核心数据,但有些事情没有奏效。如果我使用导航控制器返回上一个视图控制器,然后返回此视图控制器以解决任何问题 - 不仅仅是我刚刚更新的那个我得到你提到的错误。

解决方案?

非常简单 - 显式保存更改。

IE

CheckSectionQuestion *theQuestion;
theQuestion = [self.fetchedResultsController objectAtIndexPath:indexPath];

theQuestion.compliantPercentage=[NSNumber numberWithInt:100];
theQuestion.completed=[NSNumber numberWithBool:YES];

//***** make sure CD saves the changes
NSError * error;
if ([theQuestion.managedObjectContext  save:&error]) {
      NSLog(@"saved");
}

希望这会有所帮助

于 2013-04-19T07:12:59.073 回答
0

它实际上是因为您尝试插入核心数据的数据类型错误。从错误日志中,我觉得有一些数字分配给了 coredata 属性,它是一个字符串。请检查您插入的所有数据

NSLog(@"class %@",[object class]);

并检查您插入的核心数据字段数据类型和对象数据类型是否相同

于 2013-03-06T05:55:44.447 回答