2016-12-08 11 views
0

私はAssets.xcassets内の画像は、私はその後、私は私のプロジェクトでcollectionviewを使用してそれらを呼び出すと、ユーザーがコアデータに名前で画像を保存する方法は?

var imageSelected = [UIImage]() 
var cityImage:UIImage? 
var cityImageName:String? 

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 
     let cell = collectionView.cellForItem(at: indexPath) 
     collectionView.allowsMultipleSelection = false 
     cityImage = imageSelected[(indexPath as NSIndexPath).row] 
let selectedImgName = String(format: "%%" ,imageSelected[(indexPath as NSIndexPath).row]) 
     cityImageName = selectedImgName 
} 
を好きな都市を選択することができるように配列

let cityImages: [UIImage] = [UIImage(named: "city_00")!,UIImage(named: "city_01")!,.....UIImage(named: "city_10")!] 

let cityNames = ["City A","City B",....., "City J"] 

にそれらを格納しcity_00,city_01,...,city_10

の名前持っています

cityImageNameに都市の名前を保存するにはどうすればよいですか?

+0

'cityImages'と' cityNames'の両方に等しいオブジェクト数がありますか? –

+0

はい彼らは等しい数を持っています – leaner122

+0

'cityImages'配列を作成した場合、なぜ' didSelect'メソッドの中に 'imageSelected'配列を使用していますか? –

答えて

0

NSValueTransformerを使用してイメージをNSDataに変換し、Core BLOBデータに格納する必要があります。 Hereはこれを達成する方法を示すチュートリアルです。

実際に文字列として保存したい場合(エンコーディングのためにより多くのスペースが必要です)、画像をbase64でエンコードする方法についてはthis questionをご覧ください。

+0

私のすべての画像はAssets.xcassetsに表示されていて、電話から何も保存していないので、データブロブとして保存する必要がありますか?私はすでにその質問を見ました。それは質問に示されているように、それを文字列にエンコードする方法です。 – leaner122

+1

すべての画像が既にアプリに入っている場合は、名前を保存するだけです。 –

+0

@ JamesPこれは、stackoverflow.com/questions/28515845/...の名前を格納することはできません。代わりの方法がありますか? – leaner122

0

イメージをコアデータに保存することはお勧めしません。これはパフォーマンスにアプリが欠けている。

イメージをBase64文字列に変換し、Base64文字列をイメージに変換するのに時間がかかります。

イメージをドキュメントフォルダに保存し、そのパスをcoreDataに保存することをお勧めします。

このようにして、アプリケーションを非常に優れたパフォーマンスで簡単に保存および取得し、コアデータに画像を保存することができます。

この方法で遅延読み込みを使用すると、アプリのパフォーマンスがさらに向上します。

イメージアセット内にすべてのイメージがあることを明記したように、イメージの名前をコアデータベースに保存するだけです。

cityImages配列にimage_nameが格納されています。

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) { 

    let yourRequiredImage:String = cityImages[indexPath.row]// Save this Image name in your core data. 
    print (yourRequiredImage) 
} 
+0

これは、名前http://stackoverflow.com/questions/28515845/swift-how-to-get-currently-displayed-image-file-name-from-uiimageviewを保存することはできません。代わりの方法がありますか? – leaner122

+2

@ leaner122名前を保存することはできないと言ったことをやめてください。名前は文字列です。それをコアデータに格納するのは簡単です。できないことは、UIImageを作成し、そのイメージ名を尋ねることです。それはまったく別物です。 – Fogmeister

+1

@leaner UIImageViewから画像を保存することはできません。私たちはすでにイメージの名前を持っていますか? UIImageViewから名前を取得する必要があるのはなぜですか? –

0

あなたのcityImages配列は画像の配列です。

代わりにイメージ名の配列に変更してください。

メモリの使用量が少なくなり、選択した方法では、選択したインデックスの配列からイメージ名を取得できます。

関連する問題