2013-06-13 82 views
2

我將魔法記錄與Core Data一起使用。使用神奇記錄將圖像保存爲核心數據

在我的應用程序中,我只有一個實體具有一些字符串屬性。現在,我想爲這個實體添加一個圖像,但我不知道如何使用神奇記錄來做到這一點。我搜索了但在網上沒有發現任何東西。在我的應用程序中,所有數據都由用戶插入,所以圖像,照相機或照片庫也是如此。

如何使用魔法記錄和核心數據存儲圖像?

回答

2

只需將圖像存儲在應用程序的文檔文件夾中,並將文件url中的字符串保存在覈心數據實體中。

+0

所以我的屬性「照片」是字符串類型? – Totka

+1

沒錯。您也可以將其稱爲「photoFileName」或「photoPath」... Apple建議僅​​在Core Data中存儲非常小的圖像,如縮略圖,並將此技術用於較大的圖像。 – Mundi

+0

你可以發佈一些示例代碼來做到這一點嗎? – Totka

0

上面的內容可以輕鬆完成。我可以給你的最好建議是創建一個新的示例項目,以保存和檢索CoreData數據庫中的圖像。這樣你就知道這個過程是如何工作的。如果您嘗試在當前項目中嵌入此功能,則可能會忽略發生在哪裏的事件。

這是非常簡單的例子,我會期待你導入的代表在.h文件等自己

首先通過按鈕

-(IBAction)pickImage:(id)sender 
{ 
     UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init]; 
     imagePicker.delegate = self; 
     [self presentModalViewController:imagePicker animated:YES]; 
} 

一旦選擇了圖像發起UIImagePicker,你可以使用的委託方法一個按鈕顯示它

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)selectedImage editingInfo:(NSDictionary *)editingInfo 

    self.imageButton.imageView.image = selectedImage; 

將其保存到CoreData分配您UIImage類型,您的數據庫中Transformable輸入你的屬性然後保存managedObjectContext

鏈接,以幫助您:

UIImagePicker Class Reference

Magical Record Docs

CoreData Recipes Sample Project

希望這有助於, 祝你好運!

+0

謝謝!現在我的照片在我的應用程序! – Totka

+0

答案有問題嗎? –

+0

是的,將照片屬性設置爲可變形減慢我的應用程序。很多 – Totka

0

我發現我的答案是:

保存:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString*nomeImmagine = [[NSString alloc] initWithFormat:@"%@", self.fieldName.text]; 
NSString *pngFilePath = [NSString stringWithFormat:@"%@/%@.png",documentsDirectory, nomeImmagine]; 
UIImage *image = self.showSelectedImage.image; // imageView is my image from camera 
NSData *data1 = [NSData dataWithData:UIImagePNGRepresentation(image)]; 
[data1 writeToFile:pngFilePath atomically:NO]; 

加載:

-(void) loadImageFromPathInsideView 
{ 
    // [self loadImageFromPathInsideView]; 
    Ricetta* contact =[[DataManager sharedClass]dammiTuttaLaRicetta:self.indice]; 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES); 

    NSString*nomeImmagine = [[NSString alloc] initWithFormat:@"%@", contact.nome2]; 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString* path = [NSString stringWithFormat:@"%@/%@.png",documentsDirectory, nomeImmagine];; 
    UIImage* image = [UIImage imageWithContentsOfFile:path]; 
    self.image.image = image; 
} 
+0

這正是我在我的答案中提出的。這是普通的香草文件訪問代碼。您仍然需要將(相對)網址存儲在您的託管對象中。 – Mundi

+0

是的,謝謝你幫我理解 – Totka

+0

謝謝。歡迎來到SOF。 – Mundi

0

忠告。在覈心數據中存儲圖像類型爲transformable(又名NSImage)類型很容易,但即使是低數量(超過20個)的應用程序性能也會很低,範圍從50k到200kb,平均爲100k。即使通過關係鏈接這些文件也很慢,因爲一個控制器經常與另一個控制器綁定。

上述存儲指向Documents文件夾的本地路徑名爲NSString的方法對整體體驗來說是更好的方法。

這樣說,創建(約150×150)的縮略圖可以有利地創造一次並存儲爲transienttransformableNSImage,而不是裝載biggy,做一個對即時調整的次數。可以很容易地觀察到表演可以在一張持有50張縮略圖的表格中上下滾動。