2013-03-04 92 views
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; 
} 
+0

不projects.recID在数据模型是同一类型' - [自generateRandom]'? – RolandasR 2013-03-04 08:24:43

+5

异常听起来我喜欢你已经设置的NSNumber到的NSString财产,试图理清/比较... – Mert 2013-03-04 08:27:25

+0

@RolandasR projects.recID是NSNumber的类型 – Mashhadi 2013-03-04 09:17:52

回答

0

其因实际错误的数据类型,你正试图插入Coredata。 从错误日志中我觉得有一些数字被分配给一个字符串的coredata属性。 请有检查所有数据所使用

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

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

0

您好我已经插入只是有这个问题。我设置了一个问题,左边的滑动条件为0%,右边的滑动条件为100%。在核心数据中,我有一个属性compliancePercentage的NSNumber数据类型。

我使用包裹简单INT数到的NSNumber [NSNumber的numberWithInt:100]

我的观点是与核心因此数据的读取的结果控制器的表视图控制器。代码片段是:

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

现在,而这将更新表视图,看起来它已经更新了核心数据,有些事情没有奏效。如果我回到前一个视图控制器使用导航控制器,然后回到这个视图控制器的任何问题 - 不只是我刚刚更新的一个我得到你提到的错误。

解决方案?

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

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"); 
} 

希望这有助于

+0

只是为了说明 - 我HAD已经检查过数据类型等等,它们都是正确的,明确地保存数据是我做出的唯一改变,让他阻止它崩溃 – 2013-04-19 07:14:59

相关问题