2012-04-05 41 views
2

我在將照片保存到核心數據時遇到問題。我試圖將它保存爲一個在實體中設置爲「可變形」的屬性。我已經看到了關於這個的各種討論,並且共識似乎是在iOS5和更高版本中,我不需要使用編碼器,因爲UIImage現在符合NSCoding。當我嘗試保存核心數據時出現錯誤。請看下面我用來保存照片的代碼...將UIImage保存到核心數據時出錯

- (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { 

    NSString *mediaType = [info objectForKey: UIImagePickerControllerMediaType]; 
    UIImage *originalImage, *editedImage, *imageToSave; 

    // Handle a still image capture 
    if (CFStringCompare ((CFStringRef) mediaType, kUTTypeImage, 0) == kCFCompareEqualTo) { 

     editedImage = (UIImage *) [info objectForKey:UIImagePickerControllerEditedImage]; 
     originalImage = (UIImage *) [info objectForKey:UIImagePickerControllerOriginalImage]; 

     if (editedImage) { 
      imageToSave = editedImage; 
     } else { 
      imageToSave = originalImage; 
     } 

     // Convert image to Data for entry into Core Data 
     NSData *imageData = [NSData dataWithData:UIImagePNGRepresentation(imageToSave)]; 

     // Add image to Core Data 
     myEntity.attribute = imageData; 

     NSError *error = nil; 
     if (![managedObjectContext save:&error]) { 
      NSLog(@"Error when saving core data"); 
      NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
      abort(); 
     } 

    } 

    [[picker parentViewController] dismissModalViewControllerAnimated: YES]; 
    [picker release]; 
} 
+0

你正在收到什麼錯誤? – Zalykr 2012-04-05 12:17:57

+1

爲什麼不將圖像保存到Document目錄,只需將其路徑保存爲NSString?它的方式比你更有效率..剛做了幾分鐘前.. – 2012-04-05 12:19:24

+0

我得到的錯誤在很大程度上是無益的:保存核心數據時出錯。未解決的錯誤[null],[null]。 – 2012-04-05 12:27:27

回答

1

我已經做了很多次了。將存儲類型從可轉換更改爲二進制數據,你應該沒問題。

你也想記住幾件事情。如果圖像很小(1MB或更小),則不應將其存儲在主實體中。如果它更大,出於性能原因,您應該將圖像本身存儲在實體中。如果圖像非常大,您可能需要考慮將其存儲在文檔目錄中,如上面的匿名提示。

+0

他從相機獲取圖像,我們都知道現在所有iPhone/iPad相機拍攝的圖像大約爲2.5 Mbs。所以我可以說他可能會得到性能問題.. – 2012-04-05 13:45:14

2

我同意約瑟夫的回答。但看Apple的建議爲,如果你的形象是(禮貌 - Marcus S. Zarra's answer here)存儲圖像:

  • 小於100K;儲存在你的主表中的二進制屬性
  • 小於1m;作爲二進制屬性存儲在輔助表中以避免過度取用
  • 大於1M;存儲在磁盤上並將其文件路徑存儲在覈心數據表中。

從你的代碼我看到的是你試圖將從相機拍攝的圖像保存到核心數據。我們知道現在從手機/ iPad相機拍攝的圖像大約爲2.5 Mbs。所以你很可能會遇到性能問題。所以我建議你將圖像存儲在文檔目錄中,並將其路徑保存爲NSString。這將是一種更有效的方式。

+0

請在我的回答中提示我是否有問題。 – 2012-04-05 14:03:25