2017-05-09 12 views
0

私はSwift 3.0でプロジェクトを進めていますが、CoreDataという5つの属性を持ち、文字列がNSManageObjectMP3Detailsの属性を持つモジュールを持っています。つまり、継続時間は、trackID,trackNametrackURLです。CoreDataモジュールからデータを取得します

私がtrackIDを渡すと、そのIDに関連する要素を取得する必要があります。たとえば、私がtrackIDを渡すと、そのトラックIDに属するトラックの継続時間、trackNameなどを取得する必要があります。

今のところ、空の配列が得られます。私がtrackIDを渡し、その情報を以下のようにそのIDに所属させる部分的に完成したコード。私はここで何が欠けていますか?

I)は(CoreDataから

public static func getTrackDetails(trackId:String?) -> [MP3Details]?{ 
    let appDelegate = UIApplication.shared.delegate as! AppDelegate; 
    let context = appDelegate.persistentContainer.viewContext; 

    let request = NSFetchRequest<NSFetchRequestResult>(entityName: MP3_DETAILS_ENTITY) 
    if(trackId != nil){ 
     request.predicate = NSPredicate(format:"trackID = %@", trackId!) 
    } 
    request.returnsObjectsAsFaults = false 

    do{ 
     let results = try context.fetch(request) 
     print("Result : ",results) 
     if(results.count > 0){ 

      return results as? [MP3Details] 
     }else{ 
      print("No Mp3 results for the track ID") 
     } 

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

上記のコードスウィフト3.0ではコアデータにアクセスできません。コアデータのアクセスは迅速に変更されました。コアデータpersistentContainerに直接アクセスできます。 – phani

+0

コードスニペットは、trackIDの代わりにnillの値を渡すと大したことになります。私はMp3Detailsを取得します – danu

+1

これまでは迅速に作業しませんでした。しかし、私はそのためのコードを持っていました。私はそれをチェックします待ってください。 – phani

答えて

0

FUNCのloaddataのを詳細を要求するかどうか私はtrackID

if let arr = StorageManager.getTrackId(playlistName: playlistName) { 
    for object in arr { 
     let trackId = object.trackID 
     print(trackId ?? "ID") 

     if let detailsArr = StorageManager.getTrackDetails(trackId: trackId) { 
      print("CoreDataItemArray :", detailsArr) 

     } 
    } 

方法を渡す方法 - >ボイド{

guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { 
     return 
    } 

    let managedObjContext = appDelegate.persistentContainer.viewContext 
    let fetchRequest = NSFetchRequest<NSManagedObject>(entityName: "Person") 
    do { 
     names = try managedObjContext.fetch(fetchRequest) 
    } catch let error as NSError { 
     print("Error while fetching the data:: ",error.description) 
    } 

} 

@IBAction func addNewName(_ sender: Any) { 
    let alert = UIAlertController(title: "Add Name", message: "Add new name:", preferredStyle: UIAlertControllerStyle.alert) 
    let alertAction = UIAlertAction(title: "Add", style: UIAlertActionStyle.default) { action in 

     guard let textField = alert.textFields?.first , 
      let nameToSave = textField.text else{ 
       return 
     } 
     print("nameToSave::: ",nameToSave) 
     self.save(name:nameToSave) 
     self.hitListTableView.reloadData() 
    } 
    alert.addTextField() 

    let alertCancelAction = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.cancel, handler: nil) 

    alert.addAction(alertAction) 
    alert.addAction(alertCancelAction) 

    self.present(alert, animated: true, completion: nil) 

} 

func save(name:String) -> Void { 

    guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { 
     return 
    } 
    let managedContext = appDelegate.persistentContainer.viewContext 
    let entity = NSEntityDescription.entity(forEntityName: "Person", in: managedContext) 
    let person = NSManagedObject(entity: entity!, insertInto: managedContext) 
    person.setValue(name, forKey: "name") 

    do { 
     try managedContext.save() 
     names.append(person) 
    } catch let error as NSError { 
     print("Error while saving the data: ",error.localizedDescription) 
    } 
} 
+0

述語はどこですか?これは私の必要条件を満たしていません – danu

+0

私は再びコードを確認します。 2分 – phani

+0

Sry yaar。私のマックで私はコードを持っていた。しかし、Googleのドライブコードには行方不明です。 – phani

0

交換してくださいプレディケートライン:

request.predicate = NSPredicate(format:"%K == %@", "trackID", trackId!) 
関連する問題