2017-05-08 23 views
2

我正在swift 3.0中處理一個項目,其中我有一個UITableView帶有多個選擇選項(每行都有一個URL)。因此,在UITableView之上使用可以在UITextfield中輸入名稱。我的要求是,一旦這些行被選中,數據應該在輸入名稱下保存在Coredata中。到目前爲止,數據被保存爲獨立的元素,所以我在使用其名稱進行數據聚類時遇到了麻煩。我怎麼能做到這一點?我保存並提取數據的方法如下。以單一名稱保存多個對象到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,然後你可以在一個字段中保存字符串數組。 – 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)