2010-05-10 190 views
0

這是我第一個使用Core Data的項目,我遵循Apple提供的事件教程,幫助我瞭解iPhone中核心數據的基本知識。iPhone核心數據問題

但現在,在我的項目上工作,我有一個問題,將數據添加到我的數據庫。

當我創建一個對象並設置數據時,如果我嘗試恢復它,系統會返回一個奇怪的字符序列。

這是我在日誌中看到,如果我嘗試登錄它:

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 

什麼樣的問題可能是這個?

編輯:

這是產生錯誤的部分代碼:

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 2010-05-10 23:29:31

+0

沒有足夠的信息,提供一些關於你在做什麼的更多細節,也許有人可以提供幫助。 – 2010-05-11 16:57:28

+0

是的,增加了產生問題的代碼部分 – bontoJR 2010-05-17 20:18:43

回答

1

你應該使用%@,而不是在你的NSLog格式%S,這將允許核心數據對象屬性顯示正確(%@能夠顯示幾乎每個內置的NSObject類)。

+0

多麼愚蠢的錯誤......你是對的!謝謝! – bontoJR 2010-05-18 08:58:19

0

另一個祕訣在你的代碼:

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

是一個完全不必要的演員。 -[NSEntityDescription insertNewObjectForEntityForName: inManagedObjectContext:返回一個通用指針id。無需投擲id有史以來。此行應爲:

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