2010-12-05 31 views
0

J'ai un problème que je ne peux pas résoudre avec une entité Core Data.Le nombre de flottants Coredata devient zéro

Dans mon entité il y a deux relations (whoHasToPay, whoHasToBePaid) et un attribut (howMuch).

Voici le code dans lequel insérer l'enregistrement dans la base de données

Debitcredit *dc = [NSEntityDescription 
    insertNewObjectForEntityForName:@"Debitcredit" 
    inManagedObjectContext:self.context]; 
dc.howMuch = [NSNumber numberWithFloat:5.2f]; 
dc.whoHasToPay = theDebitor; 
dc.whoHasToBePaid = theCreditor; 
NSLog(@"%@", dc); 
[self.context save:&error]; 

Le NSLog montre

<Debitcredit: 0x151590> (entity: Debitcredit; id: 0x141570 
    <x-coredata:///Debitcredit/t8DC4691F-5DE3-42D5-8095-C2D5D3264C8D2> ; data: { 
    howMuch = "5.2"; 
    whoHasToBePaid = "0x140c50 <x-coredata://C25DC4FE-B46B-402C-B513-A2A83C6A9F86/Users/p1>"; 
    whoHasToPay = "0x14c280 <x-coredata://C25DC4FE-B46B-402C-B513-A2A83C6A9F86/Users/p2>"; 
}) 

donc la valeur howMuch semble être correct.

Cependant, quand je l'appelle à nouveau avec

fetchRequestCount = [[NSFetchRequest alloc] init]; 
entityCount = [NSEntityDescription entityForName:@"Debitcredit"  
    inManagedObjectContext:self.context]; 
[fetchRequestCount setEntity:entityCount]; 
fetchedObjectsCount = [self.context executeFetchRequest:fetchRequestCount error:&error]; 
for (Debitcredit *dc in fetchedObjectsCount) { 
    NSLog(@"%f", [dc valueForKey:@"howMuch"]); 
    NSLog(@"%@", [[dc valueForKey:@"whoHasToPay"] name]); 
    NSLog(@"%@", [[dc valueForKey:@"whoHasToBePaid"] name]); 
} 
[fetchRequestCount release]; 

la NSLog montre

2010-12-05 01:47:04.636 myApp[6179:307] 0.000000 
2010-12-05 01:47:04.642 myApp[6179:307] John 
2010-12-05 01:47:04.646 myApp[6179:307] Jack 

Il semble que howMuch est devenu nul. Pourquoi? Ai-je tort?

Répondre

3

Il s'agit d'une erreur de consignation. Les flottants et autres valeurs numériques sont stockés en tant qu'objets NSNumber. Cela:

[dc valueForKey:@"howMuch"] 

... renvoie un objet NSNumber et non une valeur flottante. Vous devez modifier le journal à:

NSLog(@"%@", [dc valueForKey:@"howMuch"]); 

... et vous devriez voir la bonne valeur.

+0

Merci, maintenant ça marche! –