2017-05-08 6 views
2

私は複数選択オプション(各行にURLがある)を持つUITableViewを持っているswift 3.0でプロジェクトを進めています。従って、UITableViewの上には、UITextfieldに名前を入力することができます。これらの行が選択されると、データは入力済みの名前でCoredataに保存されます。今のところ、データは個々の要素として保存されるため、名前の下にデータをクラスタリングすることには問題があります。どうすればこれを達成することができますか?私は以下のようにデータを保存し抽出する方法です。複数のオブジェクトを単一の名前でコアデータに保存する

保存

public static func savePlaylistDetails(audio:AudioDetails, playListName: String) { 

    let appDelegate = UIApplication.shared.delegate as! AppDelegate 
    let context = appDelegate.persistentContainer.viewContext 

    let newPlaylist = NSEntityDescription.insertNewObject(forEntityName: PlayList_DETAILS_ENTITY, into: context) 


    newPlaylist.setValue(playListName, forKey:"playlistName"); 
    newPlaylist.setValue(audio.mediaId, forKey:"trackID"); 

    do{ 
     try context.save(); 
     print("Saved.....") 
    } 
    catch{ 
     print("There was an error") 
    } 
} 

辞書を作成し、適切なキーを持つ辞書内のすべてのフィールドを保存し、保存されたデータに

public static func getPlayList() -> [PlayListDetails]?{ 
    let appDelegate = UIApplication.shared.delegate as! AppDelegate; 
    let context = appDelegate.persistentContainer.viewContext; 

    let request = NSFetchRequest<NSFetchRequestResult>(entityName: PlayList_DETAILS_ENTITY) 
    request.returnsObjectsAsFaults = false 

    do{ 
     let results = try context.fetch(request) 
     if(results.count > 0){ 
      for result in results as! [NSManagedObject]{ 
       let playListDetails:PlayListDetails? = result as? PlayListDetails 
       print("Title: \(playListDetails?.playlistName)") 


      } 
      return results as? [PlayListDetails] 
     }else{ 
      print("No results") 
     } 

    }catch{ 
     print("Error in fetching items") 
    } 
    return nil; 
} 
+0

フィールドのデータ型を変更できますか?はいの場合、データ型をNSDataに変更して、1つのフィールドに文字列の配列を保存することができます。 – GeneCode

+0

と同じように、迅速なステップとコードスニペットには大いに感謝しますか? – danu

答えて

0

を取得します。そして、データへの辞書を変換し、coreData 保存で保存...

let data = NSKeyedArchiver.archivedData(withRootObject: dictionary) 
let appDelegate = UIApplication.shared.delegate as! AppDelegate 
    let context = appDelegate.persistentContainer.viewContext 

    let newPlaylist = NSEntityDescription.insertNewObject(forEntityName: PlayList_DETAILS_ENTITY, into: context) 


    newPlaylist.setValue(data , forKey:"playlistData"); 

取得

まずCoreDataからデータを取得し、再度辞書に変換します。

let unarchivedDictionary = NSKeyedUnarchiver.unarchiveObject(with: data) 
関連する問題