2010-05-10 3 views
0

Это мой первый проект с Core Data, я следил за учебником Event, предоставленным Apple, который помог мне понять основные основные данные в iPhone.Проблема с iPhone Core Data

Но теперь, работая над моим проектом, у меня проблема с добавлением данных в мою базу данных.

Когда я создаю объект и устанавливаю данные, если я пытаюсь его вернуть, система возвращает мне странную последовательность символов.

Это то, что я вижу в журнале, если я пытаюсь войти его:

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 

Какие проблемы может быть это?

Edit:

Это часть кода, который генерирует сообщение об ошибке:

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

Не знаю, пока вы не разместите свой код. Похоже, проблема кодирования. – Jordan

+0

Не хватает информации, расскажите подробнее о том, что вы делаете, и, возможно, кто-то может помочь. –

+0

да, добавлена ​​часть кода, генерирующего проблему – bontoJR

ответ

1

Вы должны использовать% @ вместо% s в вашем формате NSLog, это позволит объект Core Data свойства отображаются правильно (% @ может отображать почти все встроенные классы NSObject).

+0

Какая глупая ошибка ... Вы правы! Благодаря! – bontoJR

0

Еще один совет в своем коде:

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

совершенно ненужный литой. -[NSEntityDescription insertNewObjectForEntityForName: inManagedObjectContext: возвращает id, который является общим указателем. Не нужно бросать id когда-либо. Данную строку следует читать:

package = [NSEntityDescription insertNewObjectForEntityForName:@"Package" inManagedObjectContext:moc]; 
Смежные вопросы