2010-05-10 6 views
0

Ceci est mon premier projet avec Core Data, j'ai suivi le tutoriel de l'événement fourni par Apple qui m'a aidé à comprendre la base des données de base dans l'iPhone. Mais maintenant, en travaillant sur mon projet, j'ai un problème pour ajouter des données dans ma base de données.iPhone Core problème de données

Lorsque je crée un objet et que je place les données, si j'essaie de le récupérer, le système me renvoie une étrange séquence de caractères.

C'est ce que je vois dans le journal si je tente de me connecter il:

2010-05-11 00:16:43.523 FG[2665:207] Package: ‡}00å 
2010-05-11 00:16:43.525 FG[2665:207] Package: ‡}00å 
2010-05-11 00:16:43.526 FG[2665:207] Package: ‡}00å 
2010-05-11 00:16:43.527 FG[2665:207] Package: ‡}00å 
2010-05-11 00:16:43.527 FG[2665:207] Package: ‡}00å 
2010-05-11 00:16:43.527 FG[2665:207] Items: 5 

Quel genre de problème pourrait être cela?

Edit:

Ceci est la partie du code qui génère l'erreur:

package = (Package *)[NSEntityDescription insertNewObjectForEntityForName:@"Package" inManagedObjectContext:moc]; 

    theNodes = [doc nodesForXPath:@"//pack" error:&error]; 
    for (CXMLElement *theElement in theNodes) 
    {  
     // Create a counter variable as type "int" 
     int counter; 

     // Loop through the children of the current node 
     for(counter = 0; counter < [theElement childCount]; counter++) { 

      if([[[theElement childAtIndex:counter] name] isEqualToString: @"id"]) 
       [package setIdPackage:[[theElement childAtIndex:counter] stringValue]]; 
      if([[[theElement childAtIndex:counter] name] isEqualToString: @"title"]) 
       [package setPackageTitle:[[theElement childAtIndex:counter] stringValue]]; 
      if([[[theElement childAtIndex:counter] name] isEqualToString: @"category"]) 
       [package setCategory:[[theElement childAtIndex:counter] stringValue]]; 
      if([[[theElement childAtIndex:counter] name] isEqualToString: @"lang"]) 
       [package setLang:[[theElement childAtIndex:counter] stringValue]]; 
      if([[[theElement childAtIndex:counter] name] isEqualToString: @"number"]) { 
       NSNumberFormatter * f = [[NSNumberFormatter alloc] init]; 
       [f setNumberStyle:NSNumberFormatterDecimalStyle]; 
       NSNumber * myNumber = [f numberFromString:[[theElement childAtIndex:counter] stringValue]]; 
       [f release];     
       [package setNumber:myNumber]; 
      } 

     } 

    } 

    NSLog([NSString stringWithFormat:@"=== %s ===\nID: %s\nCategory: %s\nLanguage: %s",[package packageTitle], [package idPackage] ,[package category],[package lang]]); 
+1

Ne saura pas que vous postez votre code. Cela ressemble à un problème d'encodage. – Jordan

+0

Pas assez d'informations, fournir plus de détails sur ce que vous faites et peut-être quelqu'un peut vous aider. –

+0

oui, ajouté la partie du code qui génère le problème – bontoJR

Répondre

1

Vous devez utiliser% @ au lieu de% s dans votre format NSLog, cela permettra l'objet de données de base propriétés à afficher correctement (% @ est capable d'afficher à peu près toutes les classes NSObject intégrées).

+0

Quelle erreur stupide ... Vous avez raison! Merci! – bontoJR

0

Une autre astuce dans votre code:

package = (Package *)[NSEntityDescription insertNewObjectForEntityForName:@"Package" inManagedObjectContext:moc]; 

Est-ce un casting complètement inutile. -[NSEntityDescription insertNewObjectForEntityForName: inManagedObjectContext: renvoie un id qui est un pointeur générique. Pas besoin de lancer id jamais. Cette ligne devrait se lire comme suit:

package = [NSEntityDescription insertNewObjectForEntityForName:@"Package" inManagedObjectContext:moc];